由于附加了 "api://",Azure AD 受众无效

Azure AD Audience is Invalid due to "api://" being appended

我有两个 Azure 守护程序应用程序。 App AApp B.

App B 按预期工作。我将 /oauth2/v2.0/token 称为访问令牌。然后我解码令牌并提取角色。

App A 没有..当我解码并验证令牌时,它说“无效的观众”。

当我使用 jwt.ms 查看令牌时,区别在于 App Aapi:// 放在 aud 部分..和 App B不是。

例如..

App A: { "aud":"api://3srlk3j..."}

App B: { "aud":"323f4lk2..."}

是什么导致一个人为一个人添加 api:// 而另一个人没有?

audience的值也是由manifest文件中的accesstokenacceptedversion控制的。 当您解码令牌时,您可以检查发行者是否具有 v1 或 v2 端点

"iss": "https://login.microsoftonline.com/xxxxx/v2.0",

例如,这里我有 v2 端点,因此清单中的 accesstokenacceptedversion 必须设置为 2,默认情况下可能为 null 或 1。

"accessTokenAcceptedVersion": 2,

所以请为您的网络应用程序 A 检查相同的内容并相应地设置它。(也为网络应用程序 B 检查相同的内容)然后尝试生成令牌。

此外,如果上述方法不能解决问题,则问题可能出在 Web API 的配置数据上。当我们说 ClientId 时,它是“公开 API”选项下的值,其中显示“Application ID URI 根据您请求访问令牌的方式,令牌的受众可能是 API.

的客户端 ID 或应用程序 ID URI

下面暴露一个API,它的App ID Uri为api://xxxxx,同样必须在应用程序设置中设置为客户端id。

 "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "myportal.onmicrosoft.com",
    "TenantId": "mytenant-guid",
    "ClientId": "api://xxxxx"
  },

所以请在两个应用程序(A 和 B)中检查此匹配项及其应用程序注册中各自的应用程序 ID URI。