以编程方式访问非 Google 资源

本文介绍如何使用外部身份以编程方式访问受 Identity-Aware Proxy (IAP) 保护的资源。

在以下几种情况下,您可能需要执行此操作:

  • 您的前端应用直接利用了 Identity Platform。您的后端 API 服务器是使用 App Engine 构建的,并使用外部身份受 IAP 保护。

  • 您的应用旨在用于非传统浏览器环境(例如在 Android、iOS 或命令行)中,在这种环境中,无法使用浏览器重定向来验证用户身份。

访问资源

如需以编程方式访问资源,请按照下列步骤操作:

  1. 检索用户的 ID 令牌。

    Node.js

    确保用户已登录。下面的代码展示了一个使用电子邮件地址和密码让用户登录的简单示例:

    // If signing in using project-level email/password IdP.
    // auth.tenantId = null; // This is null by default.
    // For signing in to a specific tenant using email/password.
    auth.tenantId = 'myTenantId';
    auth.signInWithEmailAndPassword(email, password)
      .then((user) => {
        // User signed in. ID token can now be retrieved.
      })
      .catch((error) => {
        // Handler error.
      });
    

    然后,您可以在 user 对象上检索 ID 令牌:

    user.getIdToken()
      .then((idToken) => {
        // idToken is now available and can be sent to API server.
      })
      .catch((error) => {
        // Handler error.
      });
    

    REST

    调用 signInWithPassword 会在响应中返回一个 ID 令牌:

    curl 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=API-KEY' \
    -H 'Content-Type: application/json' \
    --data-binary '{
      "email":"EMAIL",
      "password":"PASSWORD",
      "returnSecureToken":true,
      "tenantId":"TENANT-ID" # Only used in multi-tenancy
      }'
    
  2. 调用受 IAP 保护的端点时,将 ID 令牌添加到授权标头中。

    curl -H "Authorization: Bearer GCIP-ID-TOKEN" "https://example.appspot.com/api"