本页介绍如何使用 Identity-Aware Proxy (IAP) 获取用户的身份。获取用户的身份后,您的应用可以验证请求是否是通过 IAP 传入的。要妥善保护应用的安全,您必须始终采用以下某种机制来获取经过 IAP 身份验证的用户身份。
使用签名标头获取用户的身份
为了确保发送到 Compute Engine、GKE、Cloud Run、App Engine 标准环境或 App Engine 柔性环境应用的请求已经过 IAP 授权,您的应用必须通过检查 x-goog-iap-jwt-assertion
HTTP 请求标头来验证每个请求。了解如何使用签名标头保护应用的安全。
IAP 还会通过以下 HTTP 标头将用户的身份传递给后端服务。这些标头应带有 accounts.google.com
命名空间前缀。它们具备兼容性,但不能被视作一种安全机制。如果使用这些标头,您必须将它们与上文中经过身份验证的 JWT 标头中的身份信息进行比较。
标头名称 | 说明 | 示例值 |
---|---|---|
X-Goog-Authenticated-User-Email
|
用户的电子邮件地址 |
accounts.google.com:example@gmail.com
|
X-Goog-Authenticated-User-Id
|
用户永久的唯一标识符。 |
accounts.google.com:userIDvalue
|
使用 App Engine 标准环境 Users API 获取用户的身份
或者,如果您有 App Engine 标准环境应用,则可以在应用代码中使用 Users API 获取用户的身份。
如果您的应用已使用此 API,则无需进行任何更改。 IAP 会提供用户的身份,但启用 IAP 后,每个用户的 Users API 用户 ID 值将会更改。
要针对某个请求获取经过 IAP 验证的用户身份,请调用 Users API 来返回当前用户。如果函数返回一个用户,例如 Java 中的 req.getUserPrincipal() != null
,则表明该用户已通过 IAP 的身份验证。
同意屏幕
IAP 启用后,当用户首次访问您的应用时,用户会被重定向到同意屏幕,以便确认要将其身份分享给您的应用。即使用户早已在 Cloud IAP 启用之前同意将身份分享给此应用,系统也会执行此重定向;此外,如果您重新启用已停用的 Cloud IAP,则会再次发生这种情况。
如果您使用的是 Users API,则该 API 通常会对属于相同 Google Workspace 网域的应用和用户隐藏同意屏幕。启用 IAP 时,同意屏幕不会自动隐藏。如需在启用 IAP 的情况下隐藏同意屏幕,请按照以下步骤操作:
- 前往 Google 管理控制台。
转到管理控制台 - 在控件列表中,选择安全性。
- 如果没有看到安全控件,请从页面底部的灰色栏中选择更多控件,然后从控件列表中选择安全。
- 如果您看不到控件,请确保以网域管理员身份登录。
- 在选项列表中,选择展开,然后选择高级设置。
- 在身份验证部分中,选择管理 API 客户端访问权限。
- 在客户端名称字段中,输入 IAP OAuth 2.0 客户端 ID。您可以在“凭据”页面上找到 IAP 客户端 ID。
转到 IAP“凭据”页面 - 在一个或多个 API 范围字段中,输入
email, openid
。 - 点击授权。
为了简化此流程,您可以使用 API 调用对所有应用使用单个 IAP OAuth 2.0 客户端 ID。您无法使用 Google Cloud 控制台指定要用于 IAP 的客户端 ID。