מטמיעים אימות של הודעות הבקשה כדי לוודא שבקשות התשלום ושליחת ההזמנה לנקודת הקצה לטיפול בהזמנות מגיעות מ-Google, ולמנוע מצדדים שלישיים לא מורשים לבצע קריאה לנקודת הקצה.
אימות הודעות באמצעות JWT
בקשות לנקודת הקצה של הטיפול בהזמנות שמגיעות משרתים של תהליך ההזמנה מקצה לקצה מכילות אסימון רשת מבוסס JSON (JWT) חתום בכותרת Authorization
למטרות אבטחה. הטוקן נוצר על ידי שירות הרשאה משותף שגם Google וגם ההטמעה של נקודת הקצה לטיפול בהזמנות יכולות להפעיל.
- Google יוצרת JWT חתום באמצעות שירות ההרשאה ומזהה הפרויקט שלכם ב-Food Ordering.
- Google שולחת את האסימון החתום בכותרת
Authorization
של כל בקשה לנקודת הקצה (endpoint) של הטיפול בהזמנות. - נקודת הקצה צריכה לפענח את האסימון החתום באמצעות ספריית האימות של Google. האסימון המפוענח מכיל פרטים כמו מזהה הפרויקט, המנפיק, מועד התפוגה ומועד ההנפקה. הנתונים האלה ישמשו אתכם כדי לקבוע את האותנטיות של הבקשה.
כדי להטמיע אימות בקשות בפרויקט:
- חילוץ ה-JWT מהכותרת
Authorization
של בקשות נכנסות. - מפענחים את הטוקן באמצעות Google Auth Library.
- מגדירים את
audience
של האסימון למזהה הפרויקט. - מוודאים שהפרטים הנכונים מופיעים במזהה המנפיק, במזהה הפרויקט ובפרטים האחרים שמופיעים בתוכן של האסימון.
ספריית ההרשאות של Google
כדי לאמת הודעות מ-Ordering End-to-End וליצור קודי הרשאה להודעות ששירות האינטרנט שלכם שולח ל-Google, תוכלו להשתמש ב-Google Auth Library בשפת התכנות שבחרתם:
- ספריית האימות של Google ל-Node.js
- ספריית האימות של Google עבור Python
- ספריית האימות של Google ל-Java
מורידים את אחת מהספריות האלה ומוסיפים אותה לקוד ההטמעה של שירות האינטרנט.
דוגמאות לבקשות אימות
בדוגמאות הבאות מוסבר איך מטמיעים אימות בקשות:
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"); }