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

React Native使用react-native-azure-auth对接Azure AD未获刷新令牌问题

排查react-native-azure-auth未返回refresh token的问题

我之前在使用react-native-azure-auth对接Azure AD时也碰到过一模一样的问题,结合Azure AD的权限规则和这个库的特性,你可以从这几个关键点入手排查:

1. 确认使用的授权流程支持refresh token

隐式授权流(Implicit Flow)是不会返回refresh token的,而offline_access scope只有在授权码流+PKCE的模式下才会生效。你需要检查AzureAuth的初始化代码,确保启用了PKCE流程:

const azureAuth = new AzureAuth({
  clientId: '你的clientId',
  tenantId: '你的tenantId',
  authorizationFlow: 'PKCE', // 必须设置这个来启用授权码流
  redirectUrl: '你的redirectUrl', // 要和Azure门户配置的一致
});

2. 验证Azure AD应用的权限配置

虽然你提到已经添加了offline_access,但还是要再确认两个点:

  • 在Azure门户的应用注册API权限页面,确保添加了Microsoft Graph的offline_access委托权限(这是微软身份平台的标准权限,用于获取refresh token)
  • 如果是企业租户内的应用,需要点击授予管理员同意,否则普通用户可能无法获取该权限

3. 强制用户重新授权权限

如果用户之前已经授权过其他权限,但没包含offline_access,Azure AD会默认跳过该权限的同意提示。你可以在调用authorize时添加prompt: 'consent'参数,强制用户重新确认所有权限:

let tokens = await this.azureAuth.webAuth.authorize({
  scope: 'offline_access profile User.ReadBasic.All Mail.Read',
  prompt: 'consent' // 强制弹出权限同意界面
});

这样用户登录时会明确看到offline_access的权限选项,同意后Azure AD才会返回对应的refresh token。

4. 检查scope参数的传递

虽然你写的scope看起来没问题,但要注意:

  • offline_access是独立的scope,不需要和其他Graph权限归为一类,确保它被正确包含在scope字符串中
  • Azure AD的scope不区分大小写,但要避免拼写错误(比如写成offlineaccess)

做完这些调整后,你再调用登录接口,应该就能在响应中拿到refresh token,并且返回的scope里会包含offline_access了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:57:56