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

如何仅从AAD获取id_token?Angular应用需获取用户身份信息

解决AAD隐式流获取id_token的资源参数问题

这个问题其实是因为你用了AAD v1.0的授权端点,并且对隐式流中resource参数的作用理解有偏差,我来一步步帮你搞定:

为什么会出现这些错误?

  • 当你把resource设为自己Angular应用的clientId时,AAD会判定你要请求访问这个clientId对应的受保护资源,但你的应用注册里并没有给自己配置访问权限,所以触发了AADSTS65005错误。
  • 而v1.0的授权端点确实强制要求resource参数,但这里的resource是指你要访问的后端API标识符,可你并没有后端,只是想获取用户身份,这时候v1.0端点就不太适配你的场景了。

正确的解决方案:切换到AAD v2.0授权端点

AAD v2.0端点专门优化了单页应用(SPA)的登录场景,它不需要resource参数,而是通过scope来声明你需要的用户信息和权限。

正确的授权请求示例

https://login.microsoftonline.com/{{MY-TENANT-HERE}}/oauth2/v2.0/authorize?response_type=id_token&client_id={{CLIENTID-HERE}}&state={{STATE-HERE}}&redirect_uri={{REDIRECTURI-HERE}}&scope=openid profile email&nonce={{nonce-here}}

注意这里的端点路径是/oauth2/v2.0/authorize,并且完全去掉了resource参数。

确认你的应用注册配置

在Azure门户里检查以下配置,确保符合要求:

  • 找到你的Angular应用注册,进入「认证」页面。
  • 在「隐式授权和混合流」区域,勾选「ID令牌」选项(这是隐式流获取用户身份的必要配置)。
  • 确认「重定向URI」已正确设置为你的Angular应用的回调地址(比如http://localhost:4200/auth-callback)。

获取并解析用户信息

当用户完成登录后,AAD会把id_token返回给你的重定向URI。你可以:

  • 使用官方的@azure/msal-angular库来处理登录流程和令牌解析,这是最推荐的方式,能帮你避免手动处理JWT的坑。
  • 如果你想手动解析,id_token是一个JWT格式的令牌,解码后可以直接拿到name、email、preferred_username等用户身份声明,这些就是你需要的用户名等信息。

补充:如果一定要用v1.0端点?

如果因为某些原因必须使用v1.0端点,可以把resource参数设为00000002-0000-0000-c000-000000000000(这是旧版AAD Graph的资源ID),不过Microsoft现在更推荐使用v2.0端点和Microsoft Graph,所以还是优先考虑前者。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:08:25