-1

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

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

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

当我使用 jwt.ms 查看令牌时,不同之处在于App A放入部分..而不是。api://audApp B

例如..

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

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

是什么导致一个添加api://一个而不是另一个?

4

1 回答 1

0

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

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

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

"accessTokenAcceptedVersion": 2,

因此,请为您的网络应用 A 进行相同的检查并进行相应的设置。(同时为网络应用 B 进行检查),然后尝试生成令牌。

在此处输入图像描述

此外,如果仅靠上述方法不能解决错误,则问题可能是 Web API 的配置数据。当我们说 ClientId 时,它是“公开 API”选项下的值,其中显示“应用程序 ID URI 根据您请求访问令牌的方式,令牌的受众可能是客户端 ID 或应用程序 ID URI API。

在此处输入图像描述

这里在暴露一个 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 在其应用程序注册中检查此匹配。

于 2021-10-28T07:06:54.647 回答