AzureAD的JWT给出了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和AAD的JWT之间的唯一区别是缺少";azp";索赔,以及缺乏";"范围";宣称来自AAD的令牌具有"0";scp";宣称然而,我找不到任何关于这是否会导致这种情况的文件,或者是否有其他原因。

欢迎任何关于如何获得更多细节的想法!谢谢

同时我能够解决这个问题。为了将来参考,我将在这里发布解决方案。

有一个";角色";在来自AAD的访问令牌中声明,但由于我不清楚的原因,由于AAD是身份提供者,我必须检查";http://schemas.microsoft.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"));
});

如果有人能解释为什么会这样,我会很感兴趣。现在,我很高兴解决了这个问题。

相关内容

最新更新