使用客户端凭据的.NET 6与Azure AD中的令牌无效

8ehkhllq  于 2022-12-27  发布在  .NET
关注(0)|答案(1)|浏览(180)

我有一个. NET 6 API,我尝试使用Azure中的令牌(使用客户端凭据)访问该API,但在通过API调用传入令牌时收到错误:
错误="invalid_token",但没有说明。
这看起来非常类似于:
.NET 6 Problem: Bearer error="invalid_token"
Invalid JWT bearer token on .net 6.0 web api
但是,添加提到的包并没有解决这个问题。所有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和密码,它们是正确的。
对于令牌请求中作用域的名称,我使用应用程序的URL,后缀为/. default。
在Azure端,我有两个应用程序注册:在API应用程序注册时,我将客户端的客户端ID和适用的范围添加到"Expose and API"部分中的"Authorized Client Applications"部分。
我收到同样的错误都使用 Postman 和斯瓦格作为前端客户端。
不确定这里还需要查找什么,或者问题到底出在哪里(代码vs. Azure设置)。
如有任何建议,我们将不胜感激。
先谢了。

j8yoct9x

j8yoct9x1#

如果您使用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"

相关问题