如何在ASP.Net应用程序中设置Principal

时间:2009-01-09 04:13:09

标签: asp.net authentication membership

我正在为客户编写一个Web应用程序。用户将拥有一次性密钥,他们将使用这些密钥初始向应用程序标识自己。一旦应用验证密钥有效,它将把他们带到一个页面,在那里他们可以创建一个普通帐户用于所有后续登录。只有在输入密钥后才能访问创建帐户页面,否则无法访问该页面。即,使用普通帐户登录的用户不应该访问它。 这是使用自定义成员资格提供程序的asp.net 3.0。

我的计划是根据密钥创建一个临时帐户,并使用该帐户对用户进行身份验证。这允许他们访问创建用户页面(使用位置标记保护),在那里他们可以创建正式帐户。然后,我使用他们的新帐户验证他们并删除临时帐户。 流程是:用户进入他们输入密钥的页面。如果密钥有效,我创建临时帐户,调用FormsAuthentication.SetAuthCookie,然后重定向到create-account页面。这一切都有效,虽然看起来有点复杂。

问题是创建用户页面可供任何经过身份验证的用户使用;我只想在输入密钥和创建正式帐户之间的时间内使用它。所以我想我会为临时帐户创建一个特殊角色,并使创建用户页面只能访问该角色而不能访问其他任何角色。我使用特殊角色创建了自己的Principal对象,并在我对临时帐户进行身份验证时尝试设置它,但我无法使其工作。

我真的希望我不必为了这个而编写自定义角色提供程序。

我该如何使这项工作?必须有一个更简单的方法!

3 个答案:

答案 0 :(得分:0)

为什么不在他们输入密钥时简单地创建真实账户。为它分配一些随机名称,然后让它们更改名称和其他详细信息。然后,您不需要创建用户页面,只需输入密钥页面和帐户详细信息编辑页面。如果您担心填写帐户详细信息,可以进行设置(可能通过MasterPage上的代码),以便在输入详细信息之前将不完整的帐户重定向到编辑详细信息页面。

或者,您可以让他们输入所需的详细信息以及输入密钥页面上的密钥代码,并在创建帐户时使用这些详细信息。

答案 1 :(得分:0)

我的建议是在验证用户时避免使用临时帐户。而是生成自己的逻辑来验证注册密钥。然后,在页面的开头,您可以检查用户是否是经过身份验证的用户(已调用SetAuthCookie)并跳转到其他页面(如果是)。

可能甚至可以更改页面访问权限以禁止此页面通过身份验证的用户(我知道您可以为未经身份验证的用户禁用帐户,但我不确定您是否可以转向另一个方向)。

但关键是,当事实上用户还不是会员时,要避免依赖会员提供者!

答案 2 :(得分:0)

在对临时令牌进行身份验证时分配“不完整”角色,然后仅限制对该角色的访问权限...创建帐户时,将其发送到重新登录页面(终止身份验证令牌)。这将简化您的安全模型。