Azure AD SPA 应用程序“IDX10511:签名验证失败”

nzp*_*mad 9 jwt single-page-application owin azure-active-directory

我有一个源自 Identity Platform 示例的 SPA 应用程序,该示例最初调用图形 API。

我已更改端点以调用本地 API。

SPA 使用 Azure AD 进行身份验证。

API 示例源自 API 的 VS 2019 项目模板。

,NET 4.7.2 - 无 .NET Core。

我可以进行身份​​验证,并且在进行网络跟踪时 ID 和访问令牌都存在。

但是,在 API 方面我收到错误:

"IDX10511: Signature validation failed. Keys tried: 'Microsoft.IdentityModel.Tokens.X509SecurityKey, KeyId: '1E50B4475DAC931359D564309A3385FFAB7FB431', InternalId: 'f61f7746-3cff-4557-8b2c-b47fad9cf1e3'. , KeyId: 1E50B4475DAC931359D564309A3385FFAB7FB431"
Run Code Online (Sandbox Code Playgroud)

解码访问令牌显示:

"{
  "typ": "JWT",
  "nonce": "G0Q6_BuYJUfZaBnX-l1Ox1eoncxXRT4KMThFBcn1-VA",
  "alg": "RS256",
  "x5t": "HlC0R12skxNZ1WQwmjOF_6t_tDE",
  "kid": "HlC0R12skxNZ1WQwmjOF_6t_tDE"
}"
Run Code Online (Sandbox Code Playgroud)

谷歌搜索一下,似乎签名因标头中的随机数而失败,这需要“特殊处理”。

所有验证均由 OWIN 完成。

知道这是什么或如何解决这个问题吗?

nzp*_*mad 12

我不认为这是配置问题,因为我从未见过任何指定签名的配置。

所以我开始浏览 msal.js - 它是开源的。

“User.Read”(我使用的示例中定义的范围)在多个位置进行了硬编码,因此我从示例中删除了该范围并创建了一个名为“abc”的虚拟范围。

我还针对范围更改重新配置了 Azure AD。

你瞧,一切正常。

更有趣的是,标题是不同的:

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "HlC0R12skxNZ1WQwmjOF_6t_tDE",
  "kid": "HlC0R12skxNZ1WQwmjOF_6t_tDE"
}
Run Code Online (Sandbox Code Playgroud)

请注意,没有随机数。

所以我怀疑,因为原始示例使用了 Microsoft Graph,“User.Read”意味着一些特殊的图形处理,添加了搞砸签名的随机数。

以供参考。