0

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

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

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

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

我怎样才能使这项工作?一定有更简单的方法!

4

3 回答 3

0

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

于 2009-05-23T03:07:17.933 回答
0

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

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

于 2009-01-09T04:18:33.973 回答
0

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

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

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

于 2009-01-09T04:19:36.687 回答