如何通过Microsoft Graph认证API获取90天有效期的刷新令牌
实现90天有效期刷新令牌的操作步骤
1. 先调整Azure AD应用注册的基础配置
- 进入Azure门户的Azure AD应用注册页,找到你当前使用的应用
- 切换到身份验证板块:如果使用后端兑换令牌的方案,需要新增Web平台的重定向URI,和现有SPA的重定向URI共存
- 切换到令牌配置板块:将刷新令牌的默认有效期调整为90天,开启滚动更新选项
- 切换到API权限板块:确认所有申请的权限已完成管理员同意,避免权限不足限制长效令牌下发
2. 授权流程调整(两种方案二选一)
方案A:保留纯SPA前端登录流程(改动最小)
纯SPA场景默认受Azure AD安全限制,调整以下配置即可拿到最长90天的刷新令牌:
- MSAL.js初始化配置中,将
cache.location设置为localStorage,不要使用sessionStorage,避免会话结束后刷新令牌被清除 - 调用
acquireTokenPopup/acquireTokenSilent接口时,不要携带prompt=login或prompt=consent强制参数,会打断长效刷新令牌的下发逻辑
注意:纯SPA场景下如果用户30天无活跃、或主动清除浏览器缓存,刷新令牌会提前失效
方案B:改为.NET Core后端兑换令牌流程(最稳定,无前端限制)
纯SPA的安全限制较多,后端兑换令牌的场景可以稳定拿到90天有效期的刷新令牌,操作如下:
- 前端MSAL.js完成登录后,只获取授权码和code_verifier参数,传递给.NET Core后端的令牌兑换接口
- 后端引入
Microsoft.Identity.Client库,调用AcquireTokenByAuthorizationCode方法,传入授权码、code_verifier、应用密钥等参数兑换访问令牌和刷新令牌 - 后端将刷新令牌加密后存储在HttpOnly Cookie或服务端缓存中,后续需要刷新访问令牌时,调用
AcquireTokenByRefreshToken方法即可,该场景下的刷新令牌支持滚动更新,最长有效期可达90天
3. 有效期验证
拿到刷新令牌后可解码JWT内容,查看exp字段对应的时间戳,确认有效期是否符合90天的预期。
内容的提问来源于stack exchange,提问作者Dor Fellus Cohen
相关产品推荐
相关产品推荐

