【问题标题】:How can I check for authorization when using forms authentication?使用表单身份验证时如何检查授权?
【发布时间】:2012-02-18 00:17:46
【问题描述】:

我正在开发一个 ASP.NET 网站。我计划使用 Forms 身份验证来保证身份验证/授权,但我在授权方面面临两个问题:

  1. 我知道如何在 Web 配置中设置允许经过身份验证的用户访问网页(例如 myPage.aspx)。但我不知道如何定义 UserA 能够访问 myPage 以检索他的信息,而不是 UserB 的信息。 我正在考虑在用户进行身份验证时生成一个令牌,因此我能够检查此令牌属于谁并验证此信息是否可供他使用。 您如何看待这种方法?表单身份验证会生成这样的令牌吗? (我在我的研究中找不到任何关于它的提及)。如果没有,我可以调整表单身份验证机制以生成还是需要我自己编写所有内容?

  2. 我想访问 web 服务,这些应该只在用户登录时返回信息。出于这个原因,我想使用上面解释的相同标记。你怎么看待这件事?这是一个好方法吗?

我问这个是因为我没有设计身份验证/授权机制的经验,任何帮助/提示将不胜感激。

【问题讨论】:

    标签: asp.net forms-authentication asp.net-authorization


    【解决方案1】:

    关于问题一,在 ASP.Net Web 表单应用程序中进行表单身份验证后,用户的身份在 Page.User.Identity 属性中显示为 FormsIdentity 对象。此对象有一个 Name 属性,其中包含用户用于登录您的站点的用户名。您可以使用此值来限制用户可以访问的内容。例如,假设您的数据库中有一个表,其中包含以下字段的用户信息:

    userId int
    userName varchar(25)
    ...more fields containing user information...
    

    您可以限制用户仅访问此表中 userName 等于 Page.User.Identity.Name 属性的行中的信息,如果您使用直接 ADO.Net 则直接访问或通过对 ORM 的查询- 映射(即 nHibernate 或 EF)域对象。

    关于问题二,Page.User.Identity 暴露的 FormsIdentity 对象有一个布尔“IsAuthenticated”属性。您可以使用它来限制对您的网络服务的访问,如下所示:

    if(Page.User.Identity.IsAuthenticated)
    {
         //Call your web service in a secure manner
    }
    

    【讨论】:

    • 那太好了,我一定会尝试的。只有一个问题:如果我知道我朋友的用户名,我不能以某种方式使用我的帐户登录但将用户名值更改为我朋友的用户名吗?
    • 不,我不相信这是可能的。我相信 asp.net 管道会提取它在成功登录时生成的加密 ASP.Net 身份验证 cookie 的内容,并使用它来填充 Page.User.identity 对象。由于此 cookie 已加密,因此无法篡改。
    • 这正是我当时所需要的!非常感谢:)
    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多