【问题标题】:Securing ASP.NET Web Forms page with ASP.NET Identity使用 ASP.NET 标识保护 ASP.NET Web 表单页面
【发布时间】:2016-08-01 00:19:44
【问题描述】:

我正在使用 Web 表单开发小型部门规模的应用程序。技术选择来自过去,因为应用程序基于已经存在的旧应用程序 + Web 表单对于我们的案例来说似乎非常快速和高效。

VS 2015 中的默认模板创建所有登录页面等。我为用户分配角色。问题来了如何保护特定文件夹或页面只对具有特定角色的用户可用?

我唯一的想法是:

If Not Page.User.Identity.IsAuthenticated or Not Page.User.Identity.IsInRole("MyRole") Then
  Response.Redirect("~/Account/Login?ReturnUrl=" & Server.UrlEncode(Request.Url.ToString())
End If

应用程序中有很多页面并不方便。我看到 MVC 用属性解决了这个问题

[Authorize( Roles = Constants.ADMIN )]

实现这一目标的最佳方法是什么?请指教。

【问题讨论】:

    标签: asp.net vb.net webforms asp.net-identity


    【解决方案1】:

    您可以在 Web.config 中限制对页面和文件夹的访问,而不是在每个页面上编写 If Then Else 代码。

    例子...

    限制特定角色对特定页面的访问

      <location path="SecureFolder/SecurePage.aspx"  >
        <system.web>
          <authorization>
            <deny users="*"/>
            <allow roles="Manager,Admin"/>            
          </authorization>
        </system.web>
      </location>
    

    将特定文件夹的访问权限限制为特定角色

      <location path="AdminFolder"  >
        <system.web>
          <authorization>
            <deny users="*"/>
            <allow roles="Admin"/>            
          </authorization>
        </system.web>
      </location>
    

    您对应用程序中需要保护的所有页面和文件夹重复 &lt;location&gt; 元素。

    有关 MSDN 的更多信息,请点击此处:https://support.microsoft.com/en-us/kb/316871

    文件夹级 Web.config 示例

    将所有内容都放在 Web 应用程序的主 Web.config 中的另一种方法是在需要保护的每个文件夹中创建一个 Web.config 文件。执行此操作时,您不需要文件夹的 Web.config 文件中的任何其他内容,也不需要包含 &lt;location&gt; 元素

    例如您可以在 AdminFolder 目录中创建一个仅包含以下代码的新 Web.config 文件,而不是将 AdminFolder 配置放在主 Web.config 文件中。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
        <authorization>
          <allow roles="Admin" />
          <deny users ="*" />
        </authorization>
      </system.web>
    </configuration>
    

    【讨论】:

    • 文章说它适用于 ASP.NET 1.0 和 1.1。这仍然是使用 ASP.NET Identity 2.1.0 执行此操作的正确方法吗?我的意思是这是否适用于使用 Identity 存储的角色,或者这适用于 ASP.NET Membership 等一些较旧的技术?
    • @Megrez7 我已经在 ASP.NET Identity 中这样做了。这仍然是一个完全有效的方法。话虽如此,您在原始问题中使用的方法也是完全有效的 - 也是我在适当情况下使用的方法(即用于少量页面)。
    • 将对特定文件夹的访问限制为特定角色,当我在 web.config 文件中设置时,现在我无法直接访问 .aspx 文件或在两种情况下提供的角色身份验证后它正在请求再次登录
    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2021-09-27
    • 2013-03-27
    相关资源
    最近更新 更多