使用 Firebase 驗證使用者

本頁面說明如何在 API Gateway 中支援使用者驗證。

如要驗證使用者,用戶端應用程式必須在 HTTP 要求的授權標頭中,傳送 JSON Web Token (JWT) 至後端 API。API Gateway 會代表您的 API 驗證權杖,因此您不必在 API 中新增任何程式碼來處理驗證程序。不過,您必須為網關設定 API 設定,才能支援所選的驗證方法。

API Gateway 會使用 JWT 發布者的 JSON Web Key Set (JWKS),以高效的方式驗證 JWT。JWKS 的位置會在閘道 API 設定的 x-google-jwks_uri 欄位中指定。API Gateway 會將 JWKS 快取五分鐘,並每五分鐘重新整理一次。

事前準備

  • 按照 Firebase 驗證說明文件,在用戶端應用程式中新增驗證程式碼。Firebase 支援使用密碼、電話號碼和 Google、Facebook 和 Twitter 等熱門聯合識別資訊提供者的驗證方式。
    • 當用戶端應用程式傳送 HTTP 要求時,要求中的授權標頭必須包含下列 JWT 宣告:
      • iss (發出者)
      • sub (主旨)
      • aud (目標對象)
      • iat (發出地)
      • exp (到期時間)

設定 API Gateway 以支援用戶端驗證

在 API Gateway 的 API 設定中,您必須擁有安全性需求物件安全性定義物件,才能驗證已簽署 JWT 中的憑證附加資訊。

如何支援 Firebase 驗證:

  1. 請在 API 設定檔的安全性定義中加入以下內容,並遵循 OpenAPI 2.0 安全性配置方案

     securityDefinitions:
        firebase:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          # Replace YOUR-PROJECT-ID with your project ID
          x-google-issuer: "https://securetoken.google.com/YOUR-PROJECT-ID"
          x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
          x-google-audiences: "YOUR-PROJECT-ID"
    
  2. 在 API 層級新增安全性區段,套用至整個 API,或是在方法層級新增安全性區段,套用至特定方法。

     security:
        - firebase: []
    

您可以在 API 設定中定義多項安全定義,但每項定義必須要有不同的發布者。如果您在 API 層級與方法層級使用安全性區段,方法層級的相關設定會覆寫 API 層級的設定。

對 API Gateway API 發出經過驗證的呼叫

當您使用認證權杖傳送要求時,建議您將權杖放入 Authorization:Bearer 標頭中。例如:

curl --request POST \
  --header "Authorization: Bearer ${TOKEN}" \
  "${GATEWAY_URL}/echo"

其中 GATEWAY_URLTOKEN 分別是內含您部署的網關網址和驗證權杖的環境變數。請參閱「向 API Gateway API 發出已驗證的要求」一文,瞭解如何使用 Authorization:Bearer 標頭傳送要求的程式碼範例。

如果您無法在傳送要求時使用標頭,可將認證憑證放入查詢參數中,名為 access_token。例如:

curl "${GATEWAY_URL}/echo?access_token=${TOKEN}"

在 API 中接收經過驗證的結果

API Gateway 通常會轉發所有收到的標頭。不過,如果後端位址是由 API 設定中的 x-google-backend 指定,則會覆寫原始 Authorization 標頭。

API Gateway 會將 X-Apigateway-Api-Userinfo 中的驗證結果傳送至後端 API。建議您改用這個標頭,而不要使用原始的 Authorization 標頭。此標頭是由 base64url 所編碼,並包含 JWT 酬載。

後續步驟