本頁說明如何在 Cloud Endpoints 中支援使用者驗證。
如要驗證使用者,用戶端應用程式必須在傳送至後端 API 的 HTTP 要求授權標頭中,傳送 JSON Web Token (JWT)。可擴充服務 Proxy (ESP) 會代表 API 驗證權杖,因此您不必在 API 中新增任何程式碼來處理驗證。不過,您必須設定 OpenAPI 文件,才能支援所選的驗證方法。
ESP 會使用 JWT 簽發者的公開金鑰,以高效能方式驗證 JWT。ESP 會快取公開金鑰五分鐘。此外,ESP 會將驗證過的 JWT 快取五分鐘,或直到 JWT 過期為止 (以先到者為準)。
事前準備
- 按照 Firebase 驗證說明文件,將驗證程式碼新增至用戶端應用程式。Firebase 支援使用密碼、電話號碼,以及 Google、Facebook 和 Twitter 等熱門聯合身分識別供應商進行驗證。
-
用戶端應用程式傳送 HTTP 要求時,要求中的授權標頭必須包含下列 JWT 聲明:
iss
(發行者)sub
(主旨)aud
(目標對象)iat
(發行時間)exp
(到期時間)
設定 OpenAPI 文件
在您的 OpenAPI 文件中必須擁有安全性需求物件與安全性定義物件,讓 ESP 能夠驗證已簽署 JWT 中的憑證附加資訊。
如何支援 Firebase 驗證:
在 OpenAPI 文件的安全性定義中新增下列項目:
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"
在 API 層級新增安全性區段,並套用至整個 API,或是在方法層級套用至特定方法。
security: - firebase: []
您可以在 OpenAPI 文件中定義多項安全定義,但每項定義必須要有不同的核發者。如果您在 API 層級和方法層級使用安全性區段,方法層級的設定就會覆寫 API 層級的設定。
您也可以新增 x-google-extensions
,自訂 JWT 位置。詳情請參閱「openAPI 擴充功能」。
讓身分認證呼叫 Endpoints API
使用驗證權杖傳送要求時,基於安全考量,建議您將權杖放入 Authorization:Bearer
標頭。例如:
curl -H "Authorization: Bearer ${TOKEN}" "${ENDPOINTS_HOST}/echo"
在此,ENDPOINTS_HOST
和 TOKEN
分別是內含您 API 主機名稱和 API 認證憑證的環境變數。如需使用 Authorization:Bearer
標頭傳送要求的範例程式碼,請參閱「向 Endpoints API 發出經過驗證的要求」。
如果無法在傳送要求時使用標頭,可將驗證憑證放入查詢參數中,名為 access_token
。例如:
curl "${ENDPOINTS_HOST}/echo?access_token=${TOKEN}"
在 API 中接收驗證結果
ESP 通常會轉發所有接收到的標頭。不過,如果後端位址是由 OpenAPI 規格中的 x-google-backend
或 gRPC 服務設定中的 BackendRule
指定,系統就會覆寫原始的 Authorization
標頭。
ESP 會將 X-Endpoint-API-UserInfo
中的驗證結果傳送至後端 API。建議您使用這個標頭,取代原始的 Authorization
標頭。這個標頭是字串,base64url
會編碼 JSON 物件。ESPv2 和 ESP 的 JSON 物件格式不同。
如果是 ESPv2,JSON 物件就是原始 JWT 酬載。對於 ESP,JSON 物件會使用不同的欄位名稱,並將原始 JWT 酬載放在 claims
欄位下。如要進一步瞭解格式,請參閱「在後端服務中處理 JWT」。
後續步驟