本页介绍如何与组织内的其他应用共享 OAuth 客户端。
概览
在项目之间共享 OAuth 客户端,就无需为组织下的每个应用手动创建新的 OAuth 客户端。 手动创建一个 OAuth 客户端后,您可以通过编程方式将其分配给多个应用。
如果某些代理无法访问“凭据”页面,但您希望它们能够启用 Identity-Aware Proxy (IAP),则可以使用 OAuth 客户端共享方法与其共享默认的 OAuth 客户端。
请注意,移动应用无法通过其他项目中的 OAuth 客户端进行身份验证。
准备工作
请按照以下某个指南为应用启用 IAP 并创建 OAuth 客户端。
请注意,目前不支持与 App Engine 共享客户端。
将共享客户端分配给后端服务
- 转到实例组页面,以确保您的实例包含在实例组中。
- 定义后端服务。
- 设置负载平衡。
- 使用 gcloud 命令行工具运行
gcloud auth login
。 - 按照显示的网址登录。
- 登录后,复制显示的验证码并将其粘贴到命令行中。
- 对要为其启用 IAP 的项目运行
gcloud config set project PROJECT_ID
。 使用“凭据”页面中的共享客户端的 ID 和密钥运行以下命令,以启用 IAP:
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --global --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
将共享客户端分配给 GKE 应用
按照相应步骤配置应用的 BackendConfig 文件。运行以下命令时使用共享客户端的 ID 和密钥:
kubectl create secret generic my-secret --from-literal=client_id=CLIENT_ID \ --from-literal=client_secret=CLIENT_SECRET
风险
在您的应用之间共享客户端虽然很方便,但存在风险。 本部分简单介绍共享客户端时的潜在风险以及如何缓解风险。
单点故障
对许多应用使用一个 OAuth 客户端会造成单点故障。 如果某客户端被错误地删除或修改,则使用该客户端的每个应用都会受到影响。
为了缓解这种情况,仅在为共享客户端实现重要使用场景时才共享客户端。
客户端密钥泄露
共享客户端需要与他人和脚本共享您的客户端密钥, 这会增加您的客户端密钥泄露的风险。令牌是通过您的应用创建还是通过被泄露的客户端密钥创建的,IAP 无法区分。
使用 Cloud Audit Logging 可以监控对 IAP 资源的访问情况。如果您认为您的客户端密钥可能被泄露了,请在“凭据”页面中进行重置。
如需缓解此风险,请像保护密码一样保护客户端密钥:限制共享客户端密钥的做法,并且绝不要将其以明文形式存储。
冒充已获授权的用户
如果您的客户端密钥被泄露,则恶意应用可以在其网域上设置 IAP 身份验证浏览器 Cookie 来冒充已获授权的用户。使用此 Cookie,IAP 会对冒充用户进行身份验证,令其能够访问共享被泄露的客户端密钥的所有应用。
若多项资源拥有同一些已获授权的用户,则请勿在这些资源之间共享客户端,以缓解此风险。为每种资源分别设置权限,以确保即使冒充用户通过身份验证,IAP 也不会为其授予访问权限。
用户身份收集
如果您的客户端密钥被泄露,则恶意应用可以使用您的客户端 ID 来收集应用的用户身份。此情况会在用户访问恶意应用时触发。
用户首次访问受 IAP 保护的应用时,会被要求与应用共享其身份。这使用户可以控制他们的个人信息。当用户同意共享其身份后,Google 登录系统会记录此次同意行为。对于来自同一项目中的任何客户端 ID 的后续请求,IAP 不会再次提示用户。
如果用户已同意与您的应用共享其身份并且访问了该恶意应用,其身份都会在未经他们同意的情况下立即被共享。