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

能否获取永久Token?Outlook账户对接Web应用的持久授权配置咨询

解决Azure AD应用获取长期Refresh Token的配置方案

要实现类似Slack的Outlook日历授权效果,让用户不用重复登录,核心是拿到能长期续期的refresh token,你需要做以下几个关键配置:

  • 添加offline_access权限
    这是获取refresh token的核心前提,没有这个权限,Azure AD只会返回短期的access token。去Azure门户的应用注册里,找到你的应用→API权限→添加权限→选Microsoft Graph的委托权限,搜索offline_access并勾选,最后记得给这个权限授予管理员同意(如果是租户内应用的话)。

  • 授权请求必须包含offline_access scope
    用户授权时,你的前端或后端发起的授权请求里,scope参数必须带上offline_access,比如要创建会议的话,scope应该是Calendars.ReadWrite offline_access——少了这个,就算权限加了也拿不到refresh token。

  • 调整Refresh Token的有效期配置
    Azure AD默认refresh token有效期是90天,但可以通过配置让它在用户活跃时持续有效:

    • 如果是单租户应用,去Azure AD的企业应用里找到你的应用→令牌配置→设置刷新令牌的生命周期,最长可以设到90天,但只要用户持续使用(后端定期用refresh token续期),token会自动滚动刷新,不会过期。
    • 多租户应用的话,默认滚动有效期也是90天,超过90天用户没使用就会过期,但正常使用下不会需要用户重新登录。
      注意:如果用户改了密码、主动撤销了对你应用的授权,refresh token还是会失效,所以后端要处理刷新失败的情况,到时引导用户重新授权就行。
  • 用授权码流程而非隐式授权
    如果你之前用的是隐式授权(implicit flow),这种流程不会返回refresh token给后端,必须换成授权码流程(authorization code flow)。去Azure门户的应用注册→认证→添加平台→Web,勾选"授权码流"选项。

  • 后端正确存储和使用Refresh Token
    后端要把用户的refresh token加密存在数据库里,当access token过期时,调用Azure AD的token端点,用refresh token换全新的access token和refresh token——每次刷新都会返回新的refresh token,记得替换旧的存储,不然旧的会失效。
    示例请求(curl):

    curl -X POST https://login.microsoftonline.com/common/oauth2/v2.0/token \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "client_id=你的客户端ID" \
    -d "client_secret=你的客户端密钥" \
    -d "refresh_token=用户的refresh token" \
    -d "grant_type=refresh_token" \
    -d "scope=Calendars.ReadWrite offline_access"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:05:49