首页 > 解决方案 > AD-角色基础授权

问题描述

我正在尝试通过使用角色来获得 Active Directory 授权。我想到目前为止我检查了每一篇文章,但我没有得到它的工作。假设 Group1 是我的用户所在的 AD 组名称。

有效的是,当我直接在控制器上进行检查时:[Authorize(Roles = "Group1")]

但现在我想把这些信息放在 appsettings.json 中,如下所示:

  "SecuritySettings": {
    "ADGroup": "Group1"
  }

在 startup.cs 中调用以下代码:

 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 构建。

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

谢谢

斯蒂芬

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

解决方案


[Authorize(Roles = "ADRoleOnly")]

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

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

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

[Authorize(Policy = "ADRoleOnly")]

或者由于策略名称是默认的,你也可以这样写:

[Authorize("ADRoleOnly")]

推荐阅读