如何验证React SPA中msal-react获取的id_token在.NET API中的有效性
验证Microsoft ID Token有效性的方案
你不用特意调用Microsoft API来验证id_token的有效性,后端直接做本地验证是更高效、更合规的做法。如果一定要通过API验证,官方也有支持的方式,但优先选本地验证。
本地验证(推荐)
id_token是JWT格式,后端按以下步骤验证即可:
- 验证签名:从Microsoft的OpenID配置端点(比如
https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration)获取公钥,用它验证token的签名是否合法,确保token没被篡改。 - 校验核心声明:
aud(受众)必须和你的client_id完全一致iss(发行者)要符合Microsoft的格式(比如https://login.microsoftonline.com/{tenantId}/v2.0)exp(过期时间)必须晚于当前时间nbf(生效时间)必须早于当前时间- 如果前端生成了
nonce,还要验证这个值是否匹配
通过API验证(可选)
如果确实需要用API验证,可使用Microsoft的令牌 introspect 端点:
- 不需要传client_secret(SPA属于公共客户端,本身不应该持有client_secret,而且该验证端点也不需要这个参数)
- 调用
https://login.microsoftonline.com/{tenantId}/v2.0/oauth2/v2.0/introspect,传入参数:token(你的id_token)、client_id、token_type_hint=id_token - 注意:这个端点需要后端具备相应权限,而且相比本地验证,会增加网络请求开销,所以非必要不推荐
另外,如果你想获取用户信息,用access_token调用Microsoft Graph的/me端点就行,但这不能替代id_token的有效性验证——access_token有效不代表id_token没被篡改,所以验证id_token还是得走上面的步骤。
内容的提问来源于stack exchange,提问作者Narges Moemenyan
相关产品推荐
相关产品推荐

