如何解码调用GCP Pub/Sub API的OAuth Bearer Token?
解码GCP OAuth Bearer Token的方法(当tokeninfo接口返回invalid_token时)
直接解码JWT结构
GCP的OAuth Bearer Token基本都是JWT格式,由.分隔的Header、Payload、Signature三部分组成。核心权限、过期时间等信息都在Payload段,无需依赖tokeninfo接口就能解码:
- 拆分Token:将获取到的Token按
.分割,取前两段(Header和Payload) - 用命令行工具解码(适用于macOS/Linux):
注:若系统base64工具无法自动处理URL安全字符,用# 解码Payload段(关键信息段) echo "$TOKEN" | cut -d. -f2 | tr '_-' '/+' | base64 --decodetr替换特殊字符后再解码;部分系统需加-d参数去除多余换行。 - 用Python快速解码(跨平台):
python3 -c "import base64, json; payload = '$TOKEN'.split('.')[1]; print(json.loads(base64.urlsafe_b64decode(payload + '='*(-len(payload)%4))))"
排查invalid_token错误的原因
返回该错误不一定是Token无效,常见场景包括:
- Token是ID Token而非Access Token:日志中捕获的Token可能是ID Token,此时需修改tokeninfo接口的参数:
curl -i "https://oauth2.googleapis.com/tokeninfo?id_token=$TOKEN" - Token已过期:解码Payload后查看
exp字段(Unix时间戳),对比当前时间即可判断是否过期 - Token已被吊销:若Token对应的服务账号密钥已删除或吊销,也会触发此错误
用GCP CLI验证Token
如果已安装并配置gcloud CLI,可直接用内置命令查看Token详情:
gcloud auth token-info "$TOKEN"
内容的提问来源于stack exchange,提问作者SRJ
相关产品推荐
相关产品推荐

