基于策略的授权 - 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 进行身份验证