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 应用服务托管时,所有用户都可以访问该页面。
是否支持这种授权方法,或者是否需要任何额外的配置才能使其正常工作?
我已检查角色是否被正确读取(Roles.GetRolesForUser()
方法 returns 已登录用户的正确角色)。
我也试过像这样替换 system.webserver 下的模块:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="Session" />
<add name="Session" type="Microsoft.AspNet.SessionState.SessionStateModuleAsync, Microsoft.AspNet.SessionState.SessionStateModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode" />
<remove name="FormsAuthenticationModule" />
<add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
<remove name="DefaultAuthentication" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />
<remove name="RoleManager"/>
<add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
</modules>
...
是的,可以通过启用角色管理器并添加允许特定 path/location 网页的用户类别来定义 web.config 中的角色。
角色缓存 Cookie 配置选项:
<roleManager enabled="true"
defaultProvider="SecurityTutorialsSqlRoleProvider"
cacheRolesInCookie="true"
createPersistentCookie="false"
cookieProtection="All">
<providers>
...
</providers>
</roleManager>
下面是微软提供的实用代码。详情请参考
为了完整起见,我已将问题中的 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>
我有一个遗留应用程序需要迁移到 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 应用服务托管时,所有用户都可以访问该页面。
是否支持这种授权方法,或者是否需要任何额外的配置才能使其正常工作?
我已检查角色是否被正确读取(
Roles.GetRolesForUser()
方法 returns 已登录用户的正确角色)。我也试过像这样替换 system.webserver 下的模块:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="Session" /> <add name="Session" type="Microsoft.AspNet.SessionState.SessionStateModuleAsync, Microsoft.AspNet.SessionState.SessionStateModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode" /> <remove name="FormsAuthenticationModule" /> <add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" /> <remove name="UrlAuthorization" /> <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" /> <remove name="DefaultAuthentication" /> <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" /> <remove name="RoleManager"/> <add name="RoleManager" type="System.Web.Security.RoleManagerModule" /> </modules> ...
是的,可以通过启用角色管理器并添加允许特定 path/location 网页的用户类别来定义 web.config 中的角色。
角色缓存 Cookie 配置选项:
<roleManager enabled="true"
defaultProvider="SecurityTutorialsSqlRoleProvider"
cacheRolesInCookie="true"
createPersistentCookie="false"
cookieProtection="All">
<providers>
...
</providers>
</roleManager>
下面是微软提供的实用代码。详情请参考
为了完整起见,我已将问题中的 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>