多个Google OAuth2客户端:授权不同客户端时刷新令牌被吊销
Google OAuth2多Client ID授权问题解析
这不是Google OAuth2的预期行为——不同Client ID对应的授权会话是完全独立的,一个Client ID的授权操作不会导致另一个Client ID的刷新令牌失效。
可能的操作失误点
- 存储逻辑出错:如果你的系统没有按Client ID区分存储刷新令牌,新授权的令牌直接覆盖了旧的,就会出现旧令牌「失效」的假象。
- 会话混淆:在同一用户会话(比如同一个浏览器)中连续发起不同Client ID的授权请求时,若没有做好会话隔离,可能导致凭证被错误覆盖。
- 手动撤销授权:用户可能在Google账号的「安全-第三方应用访问」里手动撤销了第一个Client ID的权限,这和第二个Client ID的操作无关。
实现多Client ID独立授权的正确做法
- 按「用户ID+Client ID」维度存储凭证:每个Client ID的刷新令牌、访问令牌、过期时间单独存储,确保不会互相覆盖。
- 独立处理每个Client ID的授权流程:每个授权请求生成独立的
state参数,回调时严格对应到发起请求的Client ID,避免会话串用。 - 调用API时匹配Client ID:使用刷新令牌获取新访问令牌时,必须用对应的Client ID和密钥,不能跨ID混用。
内容的提问来源于stack exchange,提问作者gregasquith
相关产品推荐
相关产品推荐

