是否可以在web.config中基于每个控制器设置用户授权? (不能使用AuthorizeAttribute)

时间:2015-09-30 17:05:44

标签: c# asp.net authorization asp.net-web-api2

我有一个使用Windows身份验证的Web API 2应用程序。我有多个控制器,这在我的web.config中用于授权:

<system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Windows" />
    <authorization>
      <allow users="AllowedUsersAndGroups" />
      <deny users="?" />
    </authorization>
    <sessionState mode="Off" />
  </system.web>

这种“毯子”授权效果很好,但是我有两个特定的控制器需要锁定不同:我想指定有权使用这两个控制器的不同用户

显而易见的答案是在控制器类上使用[Authorize()]属性,但我不能使用此属性,因为我使用的是每个环境(Dev-UAT-Prod)XML转换为web.config和需要能够在每个环境中更改这些控制器上授权的用户。

那么,是否可以在我的web.config文件中为各个控制器指定授权?

我对其他解决方案持开放态度,只要它们允许在每个环境(dev-uat-p​​rod)中部署应用程序时授权不同的用户。

谢谢!

1 个答案:

答案 0 :(得分:3)

在我们的环境中,我们使用这种方法:

Active Directory组的名称存储在app-settings中。这些名称因环境而异。

接下来,我们创建了一个名为AuthorizeAttribute的{​​{1}}子类型,如下所示:

AuthorizeWritersAttribute

最后,我们将此属性应用于我们的控制器:

public class AuthorizeWritersAttribute : AuthorizeAttribute 
{
    public AuthorizeWritersAttribute()
    {
        Roles = ConfigurationManager.AppSettings["SolutionName:AuthorizedWriters"];
        // Actually we removed the dependency on ConfigurationManager but for brevity this suffices.
    }
}

我们使用AD-groups,但AD帐户也可以使用。