来自 AzureAD 的 JWT 在 .NET 核心中给出 403 Forbidden API
JWT from AzureAD gives 403 Forbidden in .NET core API
我有一个 asp.net 核心 API 可用于 JWT 身份验证。角色用于授权,我不使用范围。 Auth0.com 和 ADFS 都可以正常工作,但是我在 AzureAD 上遇到了问题。我从 AzureAD 获得了一个 JWT,看起来不错。但是,然后会发生这种情况:
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[2]
Successfully validated the token.
dbug: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[8]
AuthenticationScheme: Bearer was successfully authenticated.
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
Authorization failed.
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[13]
AuthenticationScheme: Bearer was forbidden.
我不知道这是什么原因。另外,我很难获得更多详细信息,因为 为什么 授权失败。
我看到来自例如 Auth0.com 的 JWT 和 AAD 之间的唯一区别是缺少“azp”声明和缺少“范围”声明。来自 AAD 的令牌具有“scp”声明。但是,我找不到任何关于这是否会导致这种情况,或者是否有其他原因的文档。
欢迎提出任何想法,以及如何获取更多详细信息!谢谢
同时我能够解决这个问题。为了将来参考,我在这里发布了解决方案。
来自 AAD 的访问令牌中有一个“角色”声明,但由于我不清楚的原因,使用 AAD 作为身份提供者,我必须检查“http://[=20= .com/ws/2008/06/identity/claims/role" 作为角色声明。
此代码适用于 Auth0、ADFS 和 AAD:
var roleClaim = Configuration["JwtOptions:RoleClaim"];
if (string.IsNullOrWhiteSpace(roleClaim)) roleClaim = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role";
services.AddAuthorization(options =>
{
options.AddPolicy("role1", policy => policy.RequireClaim(roleClaim, "role1", "role2"));
options.AddPolicy("role2", policy => policy.RequireClaim(roleClaim, "role2"));
});
如果有人能阐明为什么会这样,我将非常感兴趣。现在,我很高兴解决了这个问题。
我有一个 asp.net 核心 API 可用于 JWT 身份验证。角色用于授权,我不使用范围。 Auth0.com 和 ADFS 都可以正常工作,但是我在 AzureAD 上遇到了问题。我从 AzureAD 获得了一个 JWT,看起来不错。但是,然后会发生这种情况:
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[2]
Successfully validated the token.
dbug: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[8]
AuthenticationScheme: Bearer was successfully authenticated.
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
Authorization failed.
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[13]
AuthenticationScheme: Bearer was forbidden.
我不知道这是什么原因。另外,我很难获得更多详细信息,因为 为什么 授权失败。
我看到来自例如 Auth0.com 的 JWT 和 AAD 之间的唯一区别是缺少“azp”声明和缺少“范围”声明。来自 AAD 的令牌具有“scp”声明。但是,我找不到任何关于这是否会导致这种情况,或者是否有其他原因的文档。
欢迎提出任何想法,以及如何获取更多详细信息!谢谢
同时我能够解决这个问题。为了将来参考,我在这里发布了解决方案。
来自 AAD 的访问令牌中有一个“角色”声明,但由于我不清楚的原因,使用 AAD 作为身份提供者,我必须检查“http://[=20= .com/ws/2008/06/identity/claims/role" 作为角色声明。
此代码适用于 Auth0、ADFS 和 AAD:
var roleClaim = Configuration["JwtOptions:RoleClaim"];
if (string.IsNullOrWhiteSpace(roleClaim)) roleClaim = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role";
services.AddAuthorization(options =>
{
options.AddPolicy("role1", policy => policy.RequireClaim(roleClaim, "role1", "role2"));
options.AddPolicy("role2", policy => policy.RequireClaim(roleClaim, "role2"));
});
如果有人能阐明为什么会这样,我将非常感兴趣。现在,我很高兴解决了这个问题。