使用 Firebase 驗證使用者
本頁說明如何在 API Gateway 中支援使用者驗證。
如要驗證使用者,用戶端應用程式必須在傳送至後端 API 的 HTTP 要求授權標頭中,傳送 JSON Web Token (JWT)。API Gateway 會代表 API 驗證權杖,因此您不必在 API 中新增任何程式碼來處理驗證。不過,您必須為閘道設定 API 設定,才能支援所選的驗證方法。
API Gateway 會使用 JWT 簽發者的 JSON Web Key Set (JWKS),以高效能的方式驗證 JWT。JWKS 的位置是在閘道的 API 設定中指定。API Gateway 會將 JWKS 快取五分鐘,並每五分鐘重新整理一次。
事前準備
- 請按照 Firebase 驗證說明文件,將驗證程式碼新增至用戶端應用程式。Firebase 支援使用密碼、電話號碼,以及 Google、Facebook 和 Twitter 等熱門聯合身分識別供應商進行驗證。
-
用戶端應用程式傳送 HTTP 要求時,要求中的授權標頭必須包含下列 JWT 聲明:
iss(發行者)sub(主旨)aud(目標對象)iat(發行時間)exp(到期時間)
設定 API Gateway 以支援用戶端驗證
您必須在 API 設定中加入安全性部分,API Gateway 才能驗證已簽署 JWT 中的憑證附加資訊。用來定義安全方法的結構定義取決於您使用的 OpenAPI 規格版本。
如何支援 Firebase 驗證:
OpenAPI 2.0
- 在 API 設定中新增下列內容:
securityDefinitions: firebase: authorizationUrl: "" flow: "implicit" type: "oauth2" # Replace PROJECT_ID with your project ID x-google-issuer: "https://securetoken.google.com/PROJECT_ID" x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com" x-google-audiences: "PROJECT_ID"
- 在 API 層級新增安全性區段,並套用至整個 API,或是在方法層級套用至特定方法。
security: - firebase: []
OpenAPI 3.x
- 在 API 設定中新增下列內容:
components: securitySchemes: firebase: type: oauth2 flows: implicit: authorizationUrl: "" scopes: {} x-google-auth: # Replace PROJECT_ID with your project ID issuer: https://securetoken.google.com/PROJECT_ID jwksUri: https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com audiences: - PROJECT_ID
- 在 API 層級新增安全性區段,並套用至整個 API,或是在方法層級套用至特定方法。
security: - firebase: []
您可以在 API 設定中定義多項安全定義,但每項定義必須要有不同的簽發者。如果您在 API 層級和方法層級使用安全性區段,方法層級的設定就會覆寫 API 層級的設定。
對 API 閘道 API 發出經過驗證的呼叫
使用認證權杖傳送要求時,建議您將權杖放入 Authorization:Bearer 標頭。例如:
curl -H "Authorization: Bearer TOKEN" "GATEWAY_URL/hello"
其中 GATEWAY_URL 和 TOKEN 應分別替換為已部署的閘道網址和驗證權杖。如需使用 Authorization:Bearer 標頭傳送要求的程式碼範例,請參閱「向 API Gateway API 發出已驗證的要求」。
如果無法在傳送要求時使用標頭,可將驗證憑證放入查詢參數中,名為 access_token。例如:
curl "GATEWAY_URL/hello?access_token=TOKEN"在 API 中接收驗證結果
API Gateway 通常會轉發所有接收到的標頭。不過,如果 API 設定中的 x-google-backend 指定後端位址,系統就會覆寫原始的 Authorization 標頭。
API Gateway 會將驗證結果傳送至後端 API。X-Apigateway-Api-Userinfo
建議使用這個標頭,而非原始的 Authorization 標頭。此標頭是由 base64url 所編碼,並且包含 JWT 酬載。