我有一个使用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-prod)中部署应用程序时授权不同的用户。
谢谢!
答案 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帐户也可以使用。