实现对接后端的One Tap一键登录的token使用与刷新相关疑问
关于ID Token的存储与请求携带要求
- 需要本地存储,且每次认证请求携带:Google One Tap发放的是符合OIDC规范的短时效ID Token,本身就是用于身份校验的凭证,你后端已经完成了Token合法性校验,常规做法是本地存储后,在所有需要身份认证的请求头中携带,标准格式为:
Authorization: Bearer <你的ID Token值> - 安卓端存储注意:不要明文存储在SharedPreferences等公开路径,优先使用系统提供的EncryptedSharedPreferences或者Keystore加密存储,避免凭证泄露。
ID Token过期后的刷新方案(行业标准处理逻辑)
ID Token默认有效期通常为1小时,且本身不支持直接刷新,通用方案有两种:
- 方案1(依赖Google能力,无感知刷新):提前解析Token中的
exp字段计算剩余有效期,在到期前3-5分钟主动调用One Tap提供的静默登录接口,只要用户设备上的关联Google账号仍处于登录状态,无需用户任何操作即可获取新的ID Token,直接替换本地存储的旧凭证即可。 - 方案2(业务侧自主管控凭证):后端首次校验Google ID Token通过后,自行下发业务体系内的
Access Token+Refresh Token组合,后续业务请求只携带业务侧的Access Token,Access Token到期后用Refresh Token向业务后端申请新的Access Token即可。该方案的优势是可以自主控制凭证有效期,无需依赖Google服务的可用性,不过需要后端额外维护Refresh Token的存储、过期、销毁逻辑。
无需存储Token的替代方案
如果你不想自行维护Token的存储、刷新逻辑,可以采用Session Cookie方案:
后端首次校验ID Token通过后,给客户端返回Set-Cookie响应头,种下带有HttpOnly、Secure、SameSite属性的会话Cookie,后续请求安卓的HTTP客户端(如OkHttp)会自动携带Cookie完成身份校验,不需要手动存储和携带Token。该方案更适合前后端同域名部署的场景,跨域场景需要额外配置CORS的凭证规则,原生安卓应用需要额外处理Cookie持久化逻辑,整体适配成本比Token方案略高。
内容的提问来源于stack exchange,提问作者s0nicYouth
相关产品推荐
相关产品推荐

