我在 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]
我做错了什么?
我在一些论坛上搜索了很多,但没有得到任何答案。我几天来就遇到这个错误,找不到任何适用于该特定错误的内容。
注意:不应验证带有 aud
00000003-0000-0000-c000-000000000000
或 https://graph.microsoft.com
的访问令牌用于 Microsoft Graph API,因为该令牌不适用于应用程序。
解码 Microsoft Graph API 令牌时遇到相同的错误:
因此,请勿验证 Microsoft Graph API 令牌并调用 API。
只有通过公开API并授予权限为应用程序生成的令牌才能被验证。
并授予 API 权限:
通过将范围传递为
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