如何配置Google IAP实现两个Google App Engine应用间授权互通
让通过前端IAP验证的用户访问后端IAP资源的方案
完全不需要禁用后端的IAP,你可以通过以下两种方式实现已通过前端IAP验证的用户访问后端服务:
方式一:传递用户的IAP身份令牌
这是最直接的用户身份传递方案,步骤如下:
- 获取前端IAP令牌:前端通过IAP验证后,可从Google Auth实例中获取用户的ID Token,比如在JS中用
gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token拿到令牌。 - 请求后端时携带令牌:调用后端API时,将ID Token放在请求头的
Authorization字段中,格式为Bearer <你的ID_TOKEN>。 - 后端验证令牌合法性:后端需要验证令牌的有效性,核心验证点包括:
- 确认令牌由Google IAP签名颁发
- 令牌的
aud(受众)字段与后端IAP的客户端ID匹配 - 令牌未过期
你可以用对应语言的Google官方验证库(比如Python的google-auth)来简化验证逻辑。
- 配置后端IAP权限:把前端用户的Google账号或所属群组添加到后端IAP的授权列表中,确保验证通过后用户有权访问。
方式二:使用服务间身份验证(适合无用户身份传递场景)
如果前端服务只是作为中间层调用后端,不需要传递具体用户身份,可以用服务账号实现:
- 给前端GAE服务的默认服务账号授予访问后端IAP资源的权限。
- 前端服务用自身的服务账号生成OAuth 2.0令牌,调用后端API时携带该令牌,后端IAP会验证服务账号的权限,允许访问。
总结:保留后端IAP的前提下,通过上述两种方案就能解决前端调用后端被拦截的问题,无需禁用IAP带来安全风险。
内容的提问来源于stack exchange,提问作者Kravitz
相关产品推荐
相关产品推荐

