Azure B2C IdP 访问令牌失败并显示 IDX10511:签名验证失败

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

我在 Azure AD B2C 中使用自定义策略为我的公司添加了一个工作企业登录名 (EntraId)。现在我可以登录,并向声明添加访问令牌,该声明是我通过 API 调用发送的 Microsoft learn

我从 b2c-iss id-token 的声明中提取此令牌,并将其添加到我的请求标头中。作为回应,我收到了 401(未经授权),其描述为:

身份验证失败:IDX10511:签名验证失败。按键 尝试过:“[‘System.Text.StringBuilder’类型的 PII 已隐藏。了解更多 详细信息,请参阅 https://aka.ms/IdentityModel/PII。]'。

这是我得到的令牌:

{
  "typ": "JWT",
  "nonce": "<some id>",
  "alg": "RS256",
  "x5t": "<some id>",
  "kid": "<some id>"
}.{
  "aud": "00000003-0000-0000-c000-000000000000",
  "iss": "https://sts.windows.net/<tenantId>/",
  "iat": <some data>,
  "nbf": <some data>,
  "exp": <some data>,
  "acct": 0,
  "acr": "1",
  "aio": "<some id>",
  "amr": [
    "pwd"
  ],
  "app_displayname": "<display name>",
  "appid": "<app id>",
  "appidacr": "1",
  "family_name": "<my family name>",
  "given_name": "<my given name>",
  "idtyp": "user",
  "ipaddr": "<ip address>",
  "name": "<my name>",
  "oid": "<object id>",
  "onprem_sid": "<some id>",
  "platf": "3",
  "puid": "<some id>",
  "rh": "0.xy.",
  "scp": "email openid profile User.Read",
  "signin_state": [
    "inknownntwk",
    "kmsi"
  ],
  "sub": "<some id>",
  "tenant_region_scope": "EU",
  "tid": "<tenant id>",
  "unique_name": "<email>",
  "upn": "<email>",
  "uti": "<some id>",
  "ver": "1.0",
  "wids": [
    "<some id>"
  ],
  "xms_idrel": "1 10",
  "xms_st": {
    "sub": "<some id>"
  },
  "xms_tcdt": <some int>,
  "xms_tdbr": "EU"
}.[Signature]

我做错了什么?

我在一些论坛上搜索了很多,但没有得到任何答案。我几天来就遇到这个错误,找不到任何适用于该特定错误的内容。

validation azure-active-directory access-token azure-ad-b2c-custom-policy aad-b2c
1个回答
1
投票

注意:不应验证带有 aud

00000003-0000-0000-c000-000000000000
https://graph.microsoft.com
的访问令牌用于 Microsoft Graph API,因为该令牌不适用于应用程序。

  • Microsoft Graph API 令牌使用的签名稍有不同,您无法使用相同的方法来验证 Microsoft Graph API 令牌。
  • 为自定义 API 生成的令牌,或者必须仅验证应用程序。

解码 Microsoft Graph API 令牌时遇到相同的错误:

enter image description here enter image description here

因此,请勿验证 Microsoft Graph API 令牌并调用 API。

只有通过公开API并授予权限为应用程序生成的令牌才能被验证。

enter image description here

并授予 API 权限:

enter image description here

通过将范围传递为

https://b2c.onmicrosoft.com/xxx/Endpoint openid offline_access
来生成访问令牌并验证范围,如下所示:

<Item Key="scope">https://b2c.onmicrosoft.com/XXX/Enpoint</Item>

参考:

jwt - 使用 Azure AD 租户 ID - 以及为“应用程序注册”颁发的有效令牌。签名验证失败 - Stack Overflow by me

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