基于策略的授权 - Auth0 身份验证 - 始终返回 Forbidden 403

Posted

技术标签:

【中文标题】基于策略的授权 - Auth0 身份验证 - 始终返回 Forbidden 403【英文标题】:Policy-based authorization - Auth0 Authentication - Always Returns Forbidden 403 【发布时间】:2021-01-20 10:33:45 【问题描述】:

我正在使用 Auth0 在我的后端 API 服务器中获得一些身份验证和授权。 Auth0 使用角色 + 权限的系统,这与此处描述的策略概念兼容 - https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.1

在用户方面,我没有问题,收集令牌。当我研究令牌时,我注意到必要的范围正在通过。


  "iss": "https://randomquoteexperimental.us.auth0.com/",
  "sub": "removedonpurpose",
  "aud": [
    "https://thechalakas.com",
    "https://randomquoteexperimental.us.auth0.com/userinfo"
  ],
  "iat": 1601906519,
  "exp": 1601992919,
  "azp": "removedonpurpose",
  "scope": "openid profile email",
  "permissions": [
    "read:penquotes"
  ]

此外,在同一个 API 服务器上,没有范围的端点,无论是没有令牌还是有令牌,都可以正常返回。所以,API server 很好,读取无范围授权就好了。

在我的 API 服务器上,我有以下内容。这是我的配置服务。

    // Register the scope authorization handler
    services.AddSingleton<IAuthorizationHandler, HasScopeHandler>();

    services.AddAuthorization(options =>
    
        //TODO1 - similar to above , migrate this also to appsettings.json
        options.AddPolicy("capquotes", policy => policy.Requirements.Add(new HasScopeRequirement("read:capquotes", "https://randomquoteexperimental.us.auth0.com/")));
        options.AddPolicy("penquotes", policy => policy.Requirements.Add(new HasScopeRequirement("read:penquotes", "https://randomquoteexperimental.us.auth0.com/")));
    );

而且,这是一个简单的端点,我正在尝试访问它。

[HttpGet]
[Route("PenScope1")]
[Authorize(Policy = "penquotes")]
public ActionResult<GeneralAPIResponse> PenScope1()

    var tempItemViewModel = new GeneralAPIResponse();
    var tempString1 = "You have the PEN Scope as per the rules"; 
    tempItemViewModel.ListOfResponses.Add(tempString1);
    return tempItemViewModel;

我已遵循官方指南,可在此处获取 - https://auth0.com/docs/quickstart/backend/aspnet-core-webapi/01-authorization#configure-the-sample-project

由于令牌具有正确的权限,并且它们是由在 Auth0 系统上配置的 API 服务器颁发的,我假设就 Auth0 而言一切都很好。

所以,我相信我在 .NET Core 项目中犯了一个错误。

【问题讨论】:

【参考方案1】:

好的,所以我找到了答案。最终,事实上,在于令牌,以及即将发生的事情。

虽然,我需要的瞄准镜来了,

  "permissions": [
    "read:penquotes"
  ]

.NET Core 没有查看必要范围的权限。它在看这里。

"scope": "openid profile email",

由于那里不存在必要的范围,因此授权被拒绝。最终,我更新了我的 React 客户端应用程序以请求必要的范围。

现在,看看正确的令牌,


  //other token things
  "scope": "openid profile email read:penquotes"

现在,授权继续进行,没有任何问题。看起来我的 .NET Core 配置没问题,但我在请求令牌时出错了。

【讨论】:

以上是关于基于策略的授权 - Auth0 身份验证 - 始终返回 Forbidden 403的主要内容,如果未能解决你的问题,请参考以下文章

添加基于策略的授权会跳过 JWT 不记名令牌身份验证检查吗?

通过自定义授权方方法使用 Auth0 授权 AWS APIGateway

Auth0 - 在 Owin 上使用带有承载访问令牌的 JWT 使用 RS256 进行身份验证

如何使用自定义策略模式实现 jwt 令牌基础身份验证以在 .net 核心中进行授权?

Django + Auth0 JWT 身份验证拒绝解码

使用 OpenId Connect 进行基于声明的身份验证