当 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。

在这里写博客:http://spencerooni.github.io/2015/07/12/authenticating-and-authorizing-users-from-active-directory-in-asp.net.html