【问题标题】:ASP.NET Core 6 - Policy based authentication scheme not workingASP.NET Core 6 - 基于策略的身份验证方案不起作用
【发布时间】:2022-01-01 16:28:38
【问题描述】:

在我的应用中,我使用以下代码验证和授权Windows Authentication 的每个请求:

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
builder.Services.AddAuthorization(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .RequireRole("DevOps-Admin")
        .Build();

    options.AddPolicy(PolicyNames.IsDevOpsAdmin, policy);
    options.FallbackPolicy = policy;
});

现在我必须额外支持Basic Authentication,但只是针对特定的 API 控制器。所以我尝试通过策略(as described here)设置认证方案。但是当我将代码更改为以下时,它不再起作用,它返回 403 - 禁止:

builder.Services.AddAuthentication().AddNegotiate();
builder.Services.AddAuthorization(options =>
{
    var policy = new AuthorizationPolicyBuilder(NegotiateDefaults.AuthenticationScheme)
        .RequireAuthenticatedUser()
        .RequireRole("DevOps-Admin")
        .Build();

    options.AddPolicy(PolicyNames.IsDevOpsAdmin, policy);
    options.FallbackPolicy = policy;
});

输出显示:

info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
      Authorization failed. These requirements were not met:
      DenyAnonymousAuthorizationRequirement: Requires an authenticated user.
      RolesAuthorizationRequirement:User.IsInRole must be true for one of the following roles: (DevOps-Admin)

我希望两个代码 sn-ps 做的完全一样?

我的想法是,如果我可以更改代码以便策略选择身份验证方案,我可以添加另一个具有“基本”方案的策略,然后执行基本身份验证和授权。然后我可以将属性Authorize 添加到我的控制器并将策略设置为新的。

做了很多谷歌搜索并观看了有关身份验证和授权的 Pluralsight 课程,但我似乎仍然不明白:(

更新 1:

如果我在第二个代码 sn-p 中注释掉 .RequireRole("DevOps-Admin") 行,它就可以工作。这很奇怪,因为当我查看声明时,每个广告组都在那里,包括DevOps-Admin,那么为什么在这种情况下RequireRole 返回false

【问题讨论】:

  • 问题解决了吗?
  • 不,因为我需要.RequireRole("DevOps-Admin") 行来确保用户具有该特定角色。我只是想缩小问题的范围。

标签: c# asp.net-core authentication asp.net-web-api authorization


【解决方案1】:

如果问题尚未解决,当我遇到相关问题时,解决方案是从 TokenValidationParameters 设置 RoleClaimType,以便 IsInRole 识别 customRole。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 2016-03-31
  • 2018-02-23
  • 2022-08-23
  • 1970-01-01
  • 2020-03-21
  • 2019-06-12
  • 2019-03-23
相关资源
最近更新 更多