2009-01-09 54 views
0

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

我的计划是创建一个基于密钥的临时账号与身份验证与该帐户的用户。这使他们能够访问创建用户页面(该页面受到位置标记的保护),从而可以在其中创建正式帐户。然后我用他们的新帐户验证它们并删除临时帐户。 流程是:用户进入一个他们输入密钥的页面。如果密钥有效,我创建临时帐户,调用FormsAuthentication.SetAuthCookie,并重定向到创建帐户页面。尽管看起来有点复杂,但这一切都有效。

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

我真的希望我没有编写自定义的角色提供只是做到这一点。

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

回答

0

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

或者,你可以让他们除了键码输入键页面上输入所需信息,并创建账户时只需使用这些细节。

0

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

可能甚至能够改变页面访问禁止此页面通过验证的用户(我知道你可以禁用未经验证的用户帐户,但我不知道如果你可以去其他方向)。

的关键,虽然是为了避免依靠会员供应商的时候,其实,用户是尚未成为会员!

0

对临时令牌身份验证时,指定一个“不完整”的角色,然后限制只能访问该角色......当创建的帐户,将它们发送到重新登录页面(终端认证令牌)。这将简化您的安全模型。