如何通过OAuth/OAuth2.0实现第三方系统访问Google Cloud Run REST API
解决方案:用OAuth 2.0客户端凭证流访问Cloud Run服务
针对你的场景,最适合的是OAuth 2.0客户端凭证流(Client Credentials Flow)——这是服务间认证的通用标准方案,不需要客户端集成Google Cloud SDK或处理服务账号密钥文件,只需通过标准HTTP请求获取令牌即可访问你的Cloud Run API。
具体步骤
1. 创建OAuth 2.0客户端ID
- 登录Google Cloud控制台,进入「API和服务」→「凭据」页面
- 点击「创建凭据」→「OAuth客户端ID」
- 选择应用类型:如果是后端服务,选「其他」或「Web应用」(根据客户端实际场景)
- 完成创建后,记录下客户端ID和客户端密钥
2. 为客户端ID分配Cloud Run Invoker权限
- 打开你的Cloud Run服务详情页,切换到「权限」标签
- 点击「添加权限」,在「新成员」输入框中填写:
client:<你的客户端ID>(格式示例:client:1234567890-abcdefghijklmnop.apps.googleusercontent.com) - 在「角色」中搜索并选择「Cloud Run Invoker」(
roles/run.invoker),保存配置
3. 获取访问Cloud Run的ID令牌
客户端需要向Google的令牌端点发送POST请求,获取身份令牌:
POST https://oauth2.googleapis.com/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials &client_id=你的客户端ID &client_secret=你的客户端密钥 &audience=你的Cloud Run服务完整URL(比如https://my-api-xyz.a.run.app)
响应示例(提取id_token字段):
{ "access_token": "...", "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6...", "token_type": "Bearer", "expires_in": 3600 }
4. 使用令牌访问Cloud Run API
在请求Cloud Run服务时,将id_token放入Authorization头:
GET https://你的Cloud Run服务URL/api/xxx Authorization: Bearer 刚才获取的id_token
关键说明
- 为什么API Key没用?Cloud Run的「要求身份认证」模式不支持API Key,API Key仅适用于公开访问的服务或搭配Cloud Endpoints使用,所以你之前的尝试会返回403是正常的。
- 令牌有效期:默认1小时,客户端可以缓存令牌,到期后重新请求即可。
- 这个方案的优势:完全遵循OAuth2标准,客户端无需任何Google Cloud特定代码,只需实现标准的HTTP请求逻辑,改动极小。
内容的提问来源于stack exchange,提问作者Vasil Yordanov
相关产品推荐
相关产品推荐

