在使用客户端凭证的.net 6 Azure AD中无效令牌



我有一个。net 6 API,我试图使用使用客户端凭证从Azure使用令牌访问,但在通过API调用传递令牌时收到错误:

错误="invalid_token"但是没有描述。

这看起来很像:

。NET 6问题:承载错误="invalid_token">
在。net 6.0 web api上JWT承载令牌无效

然而,添加上述包并不能解决问题。所有NuGet包都是最新的。

查看Kestrel的日志,似乎没有任何真正的错误:

info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter[0]
Microsoft.IdentityModel Version: 6.25.1.0.....
IDX10242: Security token: *** has a valid signature.
info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter[0]
IDX10239: Lifetime of the token is valid.
info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter[0]
IDX10234: Audience Validated.Audience: '*'
info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter[0]
IDX10245: Creating claims identity from the validated token: '***'.
info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter[0]
IDX10241: Security token validated. token: '*'.

重要:如果我将令牌请求从"客户端凭据"更改为"授权码",它可以完美地工作,并且令牌被接受(在我使用指定用户帐户登录后)。我已经三次检查了客户端ID和secret,它们是正确的。

对于令牌请求中作用域的名称,我使用应用程序的URL,后缀为/.default。

在Azure端,我有两个应用程序注册:一个用于API,一个用于客户端。在API应用程序注册时,我在"授权客户端应用程序"中添加了客户端ID和适用范围;部分中的"暴露和api"。部分。

我收到同样的错误使用邮差和Swagger作为前端客户端。

不确定这里还有什么要找的,或者问题到底在哪里(代码vs. Azure设置)。

如有任何建议,不胜感激。

提前感谢。

问题出在MS Azure的配置中。我需要在API应用程序注册中添加一个应用程序角色,并为组织授予新角色的许可。从那里,我在客户端应用程序注册的API权限部分添加了该角色,并再次授予同意。几分钟后一切正常。

如果你使用AddJwtBearer来保护你的API,那么你可以启用这个标志:

.AddJwtBearer(options => 
{
options.IncludeErrorDetails = true;
...
}

如果您启用它,那么您将获得一个响应头,其中包含有关令牌未被接受的更多详细信息,如:

HTTP/1.1 401 Unauthorized
Date: Sun, 02 Aug 2020 11:19:06 GMT
WWW-Authenticate: Bearer error="invalid_token", error_description="The signature is invalid"

为了补充这个答案,我写了一篇博客文章,详细介绍了这个主题:ASP中JwtBearer身份验证问题的故障排除。网络核心

最新更新