透過程式存取非 Google 資源

本文說明如何透過程式碼存取受 Identity-Aware Proxy (IAP) 保護的資源,並使用外部身分。

您可能會在下列幾種情況下執行這項操作:

  • 您的前端應用程式會直接使用 Identity Platform。後端 API 伺服器是使用 App Engine 建構,並由使用外部身分的 IAP 保護。

  • 您的應用程式適用於非傳統瀏覽器環境,例如 Android、iOS 或指令列,在這些環境中,使用瀏覽器重新導向來驗證使用者是不可行的。

存取資源

如要透過程式碼使用服務帳戶 JWT 存取資源,請參閱「使用服務帳戶 JWT 進行驗證」。

如要透過程式輔助方式使用 ID 權杖存取資源,請按照下列步驟操作:

  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"