如何获取Google OAuth 2.0的Refresh Token?当前仅返回Access Token
解决Google OAuth2获取Refresh Token的问题
要获取Refresh Token,你需要在initTokenClient的配置中添加两个关键参数,并正确处理返回结果:
核心修改点
- 添加
access_type: 'offline':这是获取Refresh Token的必要条件,告知Google你的应用需要离线访问权限,允许在用户未主动登录时通过Refresh Token刷新Access Token。 - 添加
prompt: 'consent':若用户此前已授权过相同权限范围,Google默认不会重复返回Refresh Token。该参数会强制用户重新确认授权,确保你能拿到Refresh Token(首次授权时可省略,但添加后能覆盖所有场景)。
修改后的代码
authenticate() { const client = google.accounts.oauth2.initTokenClient({ client_id: 'MY_CLIENT_ID', scope: [ "All_NECESSARY_SCOPES", ].join(" "), access_type: 'offline', // 启用离线访问,触发Refresh Token返回 prompt: 'consent', // 强制重新授权,确保获取到Refresh Token callback: (res) => { this.accessToken = res.access_token this.refreshToken = res.refresh_token // 新增:保存Refresh Token this.loadClient() } }) client.requestAccessToken() },
重要注意事项
- Refresh Token仅在首次授权或用户重新同意授权时返回,后续登录若用户未取消授权,响应中不会包含该字段。因此必须将获取到的Refresh Token安全存储在服务器端(禁止存在客户端本地),后续用它来刷新Access Token。
- 确认Google Cloud控制台中,你的OAuth 2.0客户端ID配置未限制离线访问权限。
内容的提问来源于stack exchange,提问作者Yuval Levi
相关产品推荐
相关产品推荐

