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

Sign In With Google:如何从返回的Id Token获取Refresh Token

新版Sign In With Google获取离线令牌说明

首先明确核心结论:你无法从返回的id_token中获取离线令牌(refresh_token),id_token是仅用于身份校验的凭证,和离线访问授权属于两个完全独立的能力体系,二者没有互转的途径。

旧的grantOfflineAccess方法废弃后,正确的离线令牌获取流程如下:

  • 前端初始化GSI授权能力时,不再使用旧的身份登录接口发起授权,而是调用google.accounts.oauth2.initTokenClient方法初始化OAuth2授权客户端,配置项中必须显式指定access_type: 'offline',同时传入你需要申请的用户权限作用域(scope)。
  • 触发授权流程,用户完成同意授权操作后,返回的响应结果中会直接包含refresh_token(即离线令牌)、access_token以及access_token的过期时间,不需要再调用额外的接口申请离线权限。
  • 注意:refresh_token仅会在用户首次给你的应用授权时返回,后续重复授权不会返回该字段,你需要在首次获取后将其存储在服务端,禁止存储在前端环境中。如果你需要重新获取某用户的refresh_token,可以在初始化授权客户端时添加配置项prompt: 'consent',强制唤起授权确认页,用户二次同意后即可重新获取新的refresh_token。

拿到离线令牌后,你可以在服务端随时调用Google OAuth2的令牌刷新接口,用refresh_token换取新的access_token,实现离线访问用户授权数据的需求,请求示例如下:

POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded

client_id=你的应用客户端ID
&client_secret=你的应用客户端密钥
&refresh_token=提前存储的对应用户离线令牌
&grant_type=refresh_token

额外说明:你仍然可以正常解析id_token获取用户的公开身份信息(昵称、头像、邮箱、用户唯一标识等),用于账号登录、身份校验的场景,该能力不受离线授权逻辑的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:57:04