当 web.config 默认按角色限制整个应用程序时,如何将单个控制器或操作列入白名单?
How to white list a single controller or action when web.config restricts entire application by role by default?
默认情况下,在我的应用程序中,我拒绝了所有不在特定活动目录组中的用户,这正常工作。
这是我的 web.config.
相关部分的片段
<system.web>
<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
<authorization>
<allow roles="domainXXX\GroupXXX" />
<deny users="*" />
</authorization>
<identity impersonate="true" />
<customErrors mode="RemoteOnly" defaultRedirect="~/Error">
<error statusCode="401" redirect="~/Error/Unauthorised" />
</customErrors>
</system.web>
现在我希望无需授权即可访问单个控制器中的操作。我已尝试将 [AllowAnonymous]
属性添加到我的控制器,但我仍然必须登录才能访问这些操作。不能混合使用这些方法吗?即在 web.config 中限制角色并通过控制器中的 [AllowAnonymous]
属性允许匿名用户?
这过去在 webforms 上运行良好,但从未在 MVC 上测试过,但我相信它应该能运行:
<location path="~/xyzPage">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
为特定 Web 位置设置单独的授权规则应该适合您。
希望对您有所帮助。
我同意了。 web.config 中不再全局限制角色,[AuthorizeAttribute]
现在通过 FilterConfig.cs
应用于所有路由。当在代码中(而不是在配置中)这样添加时,[AllowAnonymous]
属性似乎会按预期工作,并且在通过控制器或操作进行注释时允许经过身份验证的访问。
FilterConfig.cs
var authorizeAttribute = new AuthorizeAttribute
{
Roles = "domainXXX\GroupXXX"
};
filters.Add(authorizeAttribute);
这允许在控制器级别进行控制,而不必对 URI 进行硬编码。因此,控制器的 URI 可以更改,而属性仍将按预期工作。这是在 web.config
中配置的,您必须记得更改那里的 URI。
默认情况下,在我的应用程序中,我拒绝了所有不在特定活动目录组中的用户,这正常工作。
这是我的 web.config.
相关部分的片段<system.web>
<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
<authorization>
<allow roles="domainXXX\GroupXXX" />
<deny users="*" />
</authorization>
<identity impersonate="true" />
<customErrors mode="RemoteOnly" defaultRedirect="~/Error">
<error statusCode="401" redirect="~/Error/Unauthorised" />
</customErrors>
</system.web>
现在我希望无需授权即可访问单个控制器中的操作。我已尝试将 [AllowAnonymous]
属性添加到我的控制器,但我仍然必须登录才能访问这些操作。不能混合使用这些方法吗?即在 web.config 中限制角色并通过控制器中的 [AllowAnonymous]
属性允许匿名用户?
这过去在 webforms 上运行良好,但从未在 MVC 上测试过,但我相信它应该能运行:
<location path="~/xyzPage">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
为特定 Web 位置设置单独的授权规则应该适合您。
希望对您有所帮助。
我同意了。 web.config 中不再全局限制角色,[AuthorizeAttribute]
现在通过 FilterConfig.cs
应用于所有路由。当在代码中(而不是在配置中)这样添加时,[AllowAnonymous]
属性似乎会按预期工作,并且在通过控制器或操作进行注释时允许经过身份验证的访问。
FilterConfig.cs
var authorizeAttribute = new AuthorizeAttribute
{
Roles = "domainXXX\GroupXXX"
};
filters.Add(authorizeAttribute);
这允许在控制器级别进行控制,而不必对 URI 进行硬编码。因此,控制器的 URI 可以更改,而属性仍将按预期工作。这是在 web.config
中配置的,您必须记得更改那里的 URI。