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

React应用中Azure AD SPA通过Auth Code Flow with PKCE实现免重复登录问题

关于Azure AD Auth Code Flow获取Refresh Token及避免重复登录的问题解答

无后端(单页应用)下Auth Code Flow+PKCE能否获取Refresh Token?

Azure AD中,单页应用(SPA)使用Auth Code Flow+PKCE时,无法获取Refresh Token。这是因为浏览器环境无法安全存储Refresh Token这类敏感凭证(本地存储易遭XSS攻击,普通Cookie易遭CSRF攻击),Azure AD针对SPA场景做了限制,仅返回短期有效的AccessToken和IdToken,同时提供静默刷新机制替代Refresh Token的作用。

有后端时如何获取并使用Refresh Token?

如果你的应用有后端服务,按以下步骤操作即可获取并使用Refresh Token:

  • 将Azure应用注册类型改为Web应用/API(而非SPA),只有非SPA类型的应用才被允许获取Refresh Token。
  • 在发起授权请求时,必须包含offline_access权限范围(scope),这是Azure AD返回Refresh Token的必要条件。
  • 后端服务使用获取到的Authorization Code,搭配应用的Client Secret(或证书),向Azure AD的token端点发起请求,此时会返回包含Refresh Token在内的Token响应。
  • 当AccessToken过期时,后端使用Refresh Token调用token端点,传入grant_type=refresh_token、Refresh Token、Client ID、Client Secret等参数,即可获取新的AccessToken,无需用户重新登录。

其他避免重复登录的方法

除了Refresh Token,还有以下方式实现无感知登录:

  • 静默刷新(Silent Flow):针对SPA场景,在AccessToken过期前,通过iframe向Azure AD授权端点发送请求并携带prompt=none参数,只要用户当前仍处于Azure AD的登录会话中(浏览器保留AD的会话Cookie),就能无需用户交互获取新的AccessToken。
  • 复用Azure AD会话Cookie:用户首次登录Azure AD后,浏览器会保存AD的会话Cookie,后续应用发起授权请求时携带prompt=none参数,Azure AD会自动识别用户会话,直接返回新的授权凭证,无需用户重新输入账号密码。
  • 安全存储IdToken:可以将IdToken存储在HttpOnly、Secure属性的Cookie中(降低XSS风险),用来快速验证用户身份,但IdToken本身是短期凭证,仍需配合静默刷新机制获取有效的AccessToken来访问资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:02:14