【问题标题】:How to set the Principal in an ASP.Net app如何在 ASP.Net 应用程序中设置 Principal
【发布时间】:2009-01-09 04:13:08
【问题描述】:

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

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

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

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

我怎样才能做到这一点?一定有更简单的方法!

【问题讨论】:

    标签: asp.net authentication membership


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-02
          • 2017-03-06
          • 1970-01-01
          • 2012-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多