You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MSAL Python仅通过id_token_claims完成用户身份验证是否合规?

针对MSAL Python纯身份验证场景的用法解答

首先直接给结论:你当前的用法能完成身份验证,但不是最精简、最符合场景需求的正确姿势,咱们来详细拆解清楚:

1. 当前用法的问题

你现在配置的["https://graph.microsoft.com/.default"]是针对Microsoft Graph API的权限范围,这个scope会触发Azure AD返回Graph的access_token,而这正是你不需要的冗余内容——因为你只需要用于身份验证的id_token,完全没必要请求API权限。

2. 正确的scope配置方式

如果只需要用户身份验证(仅获取id_token),你应该使用OIDC(OpenID Connect)标准的scope,这才是MSAL用于纯身份验证场景的设计初衷:

  • 最基础的配置:["openid"]——只要包含这个scope,Azure AD就会返回id_token,里面包含核心的身份标识字段(比如用户唯一IDsub、租户IDtid等),完全满足纯身份验证需求。
  • 如果需要用户的基础信息(比如姓名、邮箱),可以加上profilescope,变成["openid", "profile"],这样id_token里会附带这些额外字段。

⚠️ 注意:你提到的用client_id作为scope不是标准做法,Azure AD并不支持这种方式,别这么用。

3. 验证id_token_claims的正确性

你提到通过返回结果中的id_token_claims来实现身份验证,这完全没问题——MSAL Python会自动帮你完成id_token的签名验证、过期检查、受众验证等安全步骤,你可以直接信任id_token_claims里的内容,不需要自己手动解码验证(只要你的authority配置正确,MSAL会处理所有安全逻辑)。

总结调整方案

把你的配置里的scope改成:

"scope": ["openid"]

或者需要用户信息的话改成:

"scope": ["openid", "profile"]

这样就能只获取你需要的id_token,不会返回多余的Graph access_token,完全符合你“仅需用户身份验证”的目标。

内容的提问来源于stack exchange,提问作者user3366016

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:53:13