Azure Web 应用是否支持来自 web.config 文件的基于角色的授权规则

Do Azure web apps support role based authorization rules from the web.config file

我有一个遗留应用程序需要迁移到 Azure Web 应用程序。当 运行 在 IIS Express 本地时,授权规则按预期工作,但是当它部署到 Azure 应用服务时,授权规则似乎没有任何效果。

授权规则在网络配置文件中定义如下:

<system.web>
    <authentication mode="Forms">
      <forms cookieless="UseCookies" loginUrl="~/Login.aspx" requireSSL="true" timeout="40" />
    </authentication>
</system.web>

<system.webServer>
    <security>
      <authorization>
        <remove users="*" />
        <remove roles="*" />
      </authorization>
      <authentication>
        <anonymousAuthentication enabled="false" />
      </authentication>
    </security> 
</system.webServer>

<location allowOverride="false" path="Admin">
  <system.webServer>
    <security>
      <authorization>
        <add accessType="Allow" roles="Admin" />
      </authorization>
    </security>
  </system.webServer>
</location>

我希望该规则只允许具有“管理员”角色的用户,但当作为 Azure 应用服务托管时,所有用户都可以访问该页面。

是否支持这种授权方法,或者是否需要任何额外的配置才能使其正常工作?

是的,可以通过启用角色管理器并添加允许特定 path/location 网页的用户类别来定义 web.config 中的角色。

角色缓存 Cookie 配置选项:

<roleManager enabled="true"    
defaultProvider="SecurityTutorialsSqlRoleProvider"    
          cacheRolesInCookie="true"    
          createPersistentCookie="false"    
          cookieProtection="All">    

     <providers>    
     ...    
     </providers>    
</roleManager>

下面是微软提供的实用代码。详情请参考

  1. https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-security/roles/role-based-authorization-cs
  2. https://docs.microsoft.com/en-us/troubleshoot/developer/webapps/aspnet/www-authentication-authorization/authorization-permissions

为了完整起见,我已将问题中的 web.config 文件修改为以下内容以使其正常工作。注意使用 system.web 而不是 system.webServer:

<system.web>
    <authentication mode="Forms">
        <forms cookieless="UseCookies" loginUrl="~/Login.aspx" requireSSL="true" timeout="40" />
    </authentication>
    <authorization>    
        <deny users="*"/>    
    </authorization>
</system.web>


<location allowOverride="false" path="Admin">
    <system.web>
        <authorization>
            <allow roles="Admin" />
        </authorization>
    </system.web>
</location>