广告角色基于授权

时间:2020-05-16 13:02:43

标签: asp.net-mvc asp.net-core

我正在尝试通过使用角色来获得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构建。

有什么建议我可能会错过吗?我的意思是,这基本上与我们在互联网上经常看到的示例相同。

谢谢

斯蒂芬

1 个答案:

答案 0 :(得分:1)

[Authorize(Roles = "ADRoleOnly")]

这将寻找名称为ADRoleOnly的角色。但是您要做的是创建一个名为ADRoleOnly的策略:

options.AddPolicy("ADRoleOnly", policy =>
    policy.RequireRole(Configuration["SecuritySettings:ADGroup"]));

因此,要检查该 policy ,您需要更改[Authorize]属性的使用方式:

[Authorize(Policy = "ADRoleOnly")]

或者因为策略名称是默认名称,所以您也可以这样写:

[Authorize("ADRoleOnly")]