有人有幸提供与 api 端点域名不同的
aud
令牌吗?我的 Blazor 调用 asp.net 应用程序 (api) 并收到错误:
当我有 api app 应用程序 id 和 Jwt 的“aud”形式的
api://[GUID]/write.access
时,它工作得很好
将其更新为域名后(需要自定义声明,没有它就无法工作),它停止工作并抛出错误。
我在 Entra 中更新观众的位置:
我想这应该足够了。我想到的唯一可能的根本原因是不同的域名:api端点是https://someappname.azurewebsites.net/accounts,从所附的屏幕截图中可以看到它是不同的
您可以在 JwtBearer 中设置预期的 aud 声明值,如下所示:
.AddJwtBearer(opt =>
{
opt.Authority = _configuration["openid:authority"];
opt.Audience = "paymentapi";
...
这应该是 API 期望在收到的访问令牌中看到的内容。
我确实在这里写了一篇关于此的博客文章:解决 ASP.NET Core 中的 JwtBearer 身份验证问题
以我的拙见,Web api 由 Azure AD 保护,因此 Azure AD 将帮助验证传入请求标头中的访问令牌。在 API 项目的 appsettings.json 文件中,它会要求我们提供一个范围,以便我们可以在 Controller 或操作方法之前使用像
[RequiredScope(RequiredScopesConfigurationKey = "AzureAd:Scopes")]
这样的属性。
因此,如果我在appsetting中设置了
"Scopes": "Tiny.Greet"
,它将重新与api://client_id/Tiny.Greet
默认范围,这里的客户端id是我们在appsettings中的ClientId中设置的。如果我们需要使用不同的受众,我们需要在 appsettings.json 中添加 "Audience": "your_required_audience"
。
谢谢您的确认
"Audience": "https://ymichuringmail.onmicrosoft.com"
就是解决方案。