實作要求訊息驗證,確認結帳請求中的「結帳」和「提交訂單」要求來自 Google,並防止未經授權的第三方呼叫您的端點。
使用 JWT 驗證郵件
基於安全考量,針對「透過 Google 訂購」伺服器向出貨端點發出的要求,會在 Authorization
標頭中加入已簽署的 JSON Web Token (JWT)。權杖是由共用授權服務產生,可由 Google 和出貨端點實作呼叫。
- Google 會使用授權服務和你的訂餐專案專案 ID 產生已簽署的 JWT。
- 每次發出要求的要求時,Google 都會將
Authorization
標頭中的已簽署權杖傳送給出貨端點。 - 您的端點必須使用 Google 驗證程式庫將已簽署的權杖解碼。已解碼的權杖包含專案 ID、核發者、到期時間和核發時間等詳細資料。請使用這項資料判斷要求的真實性。
如要為專案實作要求驗證,請按照下列步驟操作:
- 從傳入要求的
Authorization
標頭中擷取 JWT。 - 使用 Google 驗證程式庫將權杖解碼。
- 將權杖的
audience
設為您的專案 ID。 - 確認權杖酬載中的核發機構、專案 ID 和其他資訊正確無誤。
Google 授權程式庫
如要驗證 Order with Google 訊息,並為網路服務傳送給 Google 的訊息產生授權碼,請使用您選擇的程式設計語言的 Google 驗證程式庫:
下載其中一個程式庫並新增至網路服務實作程式碼。
申請驗證的示例
下列範例說明如何實作要求驗證:
Node.js
const auth = require('google-auth-library') const authClient = new auth.OAuth2Client() /** * Verifies that an incoming request came from Google. * @param {String} idToken - The ID token used to verify the request * (i.e. The value found in the Authorization header of an incoming request). * @param {String} audience - The expected audience of the request * (i.e. The project ID for your project). * @return {boolean} True if request came from Google, false otherwise. */ function isRequestFromGoogle(idToken, audience) { authClient.verifyIdToken({idToken, audience}, (err, info) => { return !(err || info['iss'] !== 'https://accounts.google.com') }) }
Python
from google.oauth2 import id_token from google.auth.transport import requests def isRequestFromGoogle(audience, token): """ Verifies that an incoming request came from Google. Args: audience (str): The expected audience of the request (i.e. The project ID for your project) token (str): The ID token used to verify the request (i.e. The value found in the Authorization header of an incoming request) Returns: True if the request came from Google, False otherwise. """ id_info = id_token.verify_oauth2_token(token, requests.Request(), audience) return id_info['iss'] == 'https://accounts.google.com'
Java
/** * Verifies that an incoming request came from Google. * @param audience The expected audience of the request * (i.e. The project ID for your project) * @param token The ID token used to verify the request * (i.e. The value found in the Authorization * header of an incoming request) * @return {@code true} if request is from Google, else {@code false} */ public boolean isRequestFromGoogle(String audience, String token) { GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier .Builder(transport, jsonFactory) .setAudience(Collections.singletonList(audience)) .build(); GoogleIdToken idToken = verifier.verify(token); if (idToken == null) return false; Payload payload = idToken.getPayload(); String issuer = (String) payload.get("iss"); return issuer.equals("https://accounts.google.com"); }