如何解决下游 api 服务的受众(aud)无效声明错误?

问题描述 投票:0回答:2

有人有幸提供与 api 端点域名不同的

aud
令牌吗?我的 Blazor 调用 asp.net 应用程序 (api) 并收到错误:

enter image description here

当我有 api app 应用程序 id 和 Jwt 的“aud”形式的

api://[GUID]/write.access

时,它工作得很好

将其更新为域名后(需要自定义声明,没有它就无法工作),它停止工作并抛出错误。

我在 Entra 中更新观众的位置

  1. Expose Api 页面上 api 应用程序的应用程序 ID URI ![enter image description here

  2. 我的 Blazor 应用程序的下游 Api 配置 enter image description here

我想这应该足够了。我想到的唯一可能的根本原因是不同的域名:api端点是https://someappname.azurewebsites.net/accounts,从所附的屏幕截图中可以看到它是不同的

oauth-2.0 azure-active-directory jwt authorization azure-entra-id
2个回答
1
投票

您可以在 JwtBearer 中设置预期的 aud 声明值,如下所示:

        .AddJwtBearer(opt =>
        {
            opt.Authority = _configuration["openid:authority"];
            opt.Audience = "paymentapi";
            ...

这应该是 API 期望在收到的访问令牌中看到的内容。

我确实在这里写了一篇关于此的博客文章:解决 ASP.NET Core 中的 JwtBearer 身份验证问题


1
投票

以我的拙见,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"
就是解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.