当前位置: 首页 > 知识库问答 >
问题:

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

潘刚洁
2023-03-14

我正在使用Auth0来获得一些在我的后端API服务器中工作的身份验证和授权。Auth0使用角色权限系统,它与此处描述的策略概念兼容-https://learn.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服务器上,没有作用域、没有令牌和有令牌的endpoint都返回正常。因此,API服务器很好,并且可以读取无范围授权。

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

    // 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/")));
    });

而且,这是我尝试访问的简单endpoint。

[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个答案

谭研
2023-03-14

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

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

  "permissions": [
    "read:penquotes"
  ]

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

"scope": "openid profile email",

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

现在,查看正确的令牌,

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

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

 类似资料:
  • 我试图在API网关上实现自定义授权,通过从Dynamodb读取用户对其背后每个特定endpoint的权限,来检查用户的权限。 授权程序似乎工作正常,并且它返回的策略在我看来很好(看看下面的内容) 然而,不管授权者在策略文档内部返回的效果如何,API网关仍然让我们所有的请求都通过。我从下面的APIendpoint获得状态200和结果集。 附注。我尝试使用显式的principalID(来自令牌的用户名

  • 我正在尝试使用基本身份验证获取url。我设置用户/密码如下所示。同样的凭证在邮递员中工作。 我认为凭据设置不正确。这里怎么了?错误:

  • OAuth术语已经困扰我很久了。OAuth授权是像一些人建议的那样,还是认证? 如果我错了,请纠正我,但我一直认为授权是允许某人访问某个资源的行为,而OAuth似乎没有任何实际允许用户访问给定资源的实现。OAuth实现所讨论的都是为用户提供一个令牌(签名的,有时是加密的)。然后,每次调用都会将该令牌传递到后端服务endpoint,在后端服务endpoint上检查该令牌的有效性,这也不是OAuth的

  • 我有一个已经完成的j2ee(jsf、cdi、jpa)应用程序,它完美地使用了ApacheShiro,它工作得非常好,我喜欢Shiro注释(hasRole、hasPermission等)。 现在,该项目还必须能够通过SiteMinder进行身份验证,我的问题是: 我如何设置一个领域来处理SiteMinder身份验证而不丢失Shiro授权(似乎SiteMinder会在HTTP头中给我用户名和Rolen

  • 问题内容: 我一直在努力用Spring-Security 正确实现Stomp(websocket) 身份验证 和 授权 。 为了后代,我将回答我自己的问题以提供指导。 问题 Spring WebSocket文档(用于身份验证)看起来不清楚ATM(IMHO)。而且我不明白如何正确处理 身份验证 和 授权 。 我想要的是 使用登录名/密码对用户进行身份验证。 防止匿名用户通过WebSocket连接。