使用ASP.NET标识保护ASP.NET Web窗体页面

时间:2016-08-01 00:19:44

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

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

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 )]

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

1 个答案:

答案 0 :(得分: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>

您需要为要保护的应用程序中的所有页面和文件夹重复<location>元素。

有关MSDN的更多信息,请访问:Run wine in parallel with gnu-parallel - needs {%} slot substitution to work

文件夹级别的Web.config示例

将所有内容放在Web应用程序的主Web.config中的替代方法是在需要保护的每个文件夹中创建一个Web.config文件。执行此操作时,您在文件夹的Web.config文件中不需要任何其他内容,并且您不需要包含<location>元素

e.g。您可以在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>