Google OAuth公钥轮换:缓存1小时是否安全?有无官方轮换文档?
GCP服务账号ID令牌验证相关问题解答
问题概述
我的服务为GCP服务账号生成id_tokens,通过Google公钥验证令牌及校验负载。我推测存在2个密钥用于轮换,但没找到轮换流程和频率的相关文档。目前用google-auth-library-php库做验证,该库在AccessToken.php里把密钥缓存1小时且无法修改,还没遵循Google推荐的Cache-Control头部。理论上如果刚好在双密钥轮换前完成缓存,可能会缓存旧密钥长达1小时,所以有两个疑问:
- 缓存密钥1小时通常是否安全?
- Google是不是不会同时轮换两个密钥?停止使用密钥对和完成轮换之间有没有窗口期?有没有相关官方文档?
解答
缓存1小时的安全性
- 缓存密钥1小时是安全的。Google的密钥轮换策略会考虑依赖缓存的服务场景,不会短时间内撤回还可能被缓存的旧密钥。哪怕刚好在轮换前缓存了旧密钥,这1小时窗口里,旧密钥依然能用来验证所有未过期的ID令牌——毕竟GCP服务账号ID令牌的有效期通常不超过1小时,不会出现验证失败的情况。
密钥轮换的机制说明
- Google不会同时轮换所有签名密钥,一般会保留至少一个旧密钥在一段时间内可用,给依赖缓存的服务留足更新缓冲期。虽然没有公开明确的轮换频率,但官方在OAuth 2.0的安全实践里明确,签名密钥的轮换会保证令牌生命周期内对应的密钥始终有效。
- 另外,就算当前用的库没遵循Cache-Control头部,1小时的缓存时长也完全覆盖了ID令牌的最大有效期,不会出现因密钥过期导致的验证失败问题。
内容的提问来源于stack exchange,提问作者jn1kk
相关产品推荐
相关产品推荐

