我正在尝试通过使用角色来获得Active Directory授权。我认为到目前为止,我检查了每篇文章,但没有使它起作用。可以说Group1是我的用户所在的AD组名。
有效的方法是,当我直接在控制器上进行检查时: [Authorize(角色=“ Group1”)]
但是现在我想像这样将这些信息放在appsettings.json中:
"SecuritySettings": {
"ADGroup": "Group1"
}
在启动代码中调用以下代码:
services.AddAuthorization(options =>
{
options.AddPolicy("ADRoleOnly", policy => policy.RequireRole(Configuration["SecuritySettings:ADGroup"]));
});
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddControllers();
services.AddControllersWithViews();
并将我的控制器更改为此:
[Authorize(Roles = "ADRoleOnly")]
但是不管我改变了什么,我总是得到403 Forbidden。 我的环境是IIS(已激活Windows身份验证)和asp.net core 3 mvc –使用Visual Studio Code构建。
有什么建议我可能会错过吗?我的意思是,这基本上与我们在互联网上经常看到的示例相同。
谢谢
斯蒂芬
答案 0 :(得分:1)
[Authorize(Roles = "ADRoleOnly")]
这将寻找名称为ADRoleOnly
的角色。但是您要做的是创建一个名为ADRoleOnly
的策略:
options.AddPolicy("ADRoleOnly", policy =>
policy.RequireRole(Configuration["SecuritySettings:ADGroup"]));
因此,要检查该 policy ,您需要更改[Authorize]
属性的使用方式:
[Authorize(Policy = "ADRoleOnly")]
或者因为策略名称是默认名称,所以您也可以这样写:
[Authorize("ADRoleOnly")]