我有一个从Identity Platform示例派生的SPA应用程序,该示例最初称为Graph 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"
解码访问令牌显示:
"{
"typ": "JWT",
"nonce": "G0Q6_BuYJUfZaBnX-l1Ox1eoncxXRT4KMThFBcn1-VA",
"alg": "RS256",
"x5t": "HlC0R12skxNZ1WQwmjOF_6t_tDE",
"kid": "HlC0R12skxNZ1WQwmjOF_6t_tDE"
}"
谷歌搜索,似乎签名由于头中的随机数而失败,这需要“特殊处理”。
所有验证均由OWIN完成。
任何想法这是什么或如何解决?
“ User.Read”(在我使用的示例中定义的范围)在许多地方都进行了硬编码,因此我从示例中删除了该范围,并创建了一个名为“ abc”的虚拟对象。
我还为范围更改重新配置了Azure AD。
瞧,一切正常。
更有趣的是,标题也不同:
{
"typ": "JWT",
"alg": "RS256",
"x5t": "HlC0R12skxNZ1WQwmjOF_6t_tDE",
"kid": "HlC0R12skxNZ1WQwmjOF_6t_tDE"
}
注意,没有随机数。
因此,我怀疑由于原始示例使用了Microsoft Graph,因此“ User.Read”暗含了一些特殊的Graph处理,该处理添加了会加重签名的随机数。对于reference。