Sipariş karşılama uç noktanıza gönderilen Ödeme ve Sipariş Gönderme isteklerinin Google'dan geldiğinden emin olmak ve yetkisiz üçüncü tarafların uç noktanızı çağırmasını önlemek için istek mesajı doğrulamasını uygulayın.
JWT ile mesaj doğrulama
Sipariş Verme Uçtan Uca sunucularından gelen istek karşılama uç noktanıza yapılan isteklerin Authorization
başlığında, güvenlik için imzalı bir JSON Web Jetonu (JWT) bulunur. Jeton, hem Google hem de istek karşılama uç noktası uygulamanız tarafından çağrılabilen paylaşılan bir yetkilendirme hizmeti tarafından oluşturulur.
- Google, yetkilendirme hizmetini ve Yemek Siparişi projenizin proje kimliğini kullanarak imzalı bir JWT oluşturur.
- Google, her isteğin
Authorization
başlığında bulunan imzalı jetonu istek karşılama uç noktanıza gönderir. - Uç noktanız, Google Auth Kitaplığı'nı kullanarak imzalı jetonun kodunu çözmelidir. Kodu çözülmüş jeton; proje kimliği, sertifikayı veren, son kullanma tarihi ve verilen zaman gibi ayrıntıları içerir. İsteğin gerçekliğini belirlemek için bu verileri kullanın.
Projenizde istek doğrulamasını uygulamak için aşağıdaki adımları izleyin:
- Gelen isteklerin
Authorization
başlığından JWT'yi çıkarın. - Google Auth Kitaplığı'nı kullanarak jetonun kodunu çözün.
- Jetonun
audience
değerini proje kimliğinize ayarlayın. - Doğruluk için jetonu veren, proje kimliğini ve jeton yükünde bulunan diğer bilgileri doğrulayın.
Google Yetkilendirme Kitaplığı
Sipariş verme mesajlarını Uçtan Uca doğrulamak ve web hizmetinizin Google'a gönderdiği mesajlar için yetkilendirme kodları oluşturmak üzere istediğiniz programlama dilinde Google Kimlik Doğrulama Kitaplığı'nı kullanın:
- Node.js için Google kimlik doğrulama kitaplığı
- Python için Google kimlik doğrulama kitaplığı
- Java için Google yetkilendirme kitaplığı
Bu kitaplıklardan birini indirip web hizmeti uygulama kodunuza ekleyin.
İstek doğrulaması örnekleri
Aşağıdaki örneklerde, istek doğrulamasının nasıl uygulanacağı gösterilmektedir:
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"); }