Ödeme uç noktanıza ödeme ve sipariş gönderme işlemlerinin Google tarafından yapılmasını sağlamak ve yetkisiz üçüncü tarafların uç noktanızı çağırmasını önlemek için istek mesajı doğrulamasını uygulayın.
JWT kullanarak mesaj doğrulama
Order with Google sunucularından gelen sipariş karşılama uç noktanıza gönderilen istekler güvenlik için Authorization
başlığında imzalı bir JSON Web Token (JWT) içerir. Jeton hem Google hem de sipariş karşılama uç nokta uygulamanız tarafından çağrılabilecek 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 jetonun
Authorization
başlığında imzalanan jetonu sipariş karşılama uçunuza gönderir. - Uç noktanız, Google Auth Kitaplığı'nı kullanarak imzalı jetonun kodunu çözmelidir. Kodu çözülmüş jeton; proje kimliği, kartı veren kuruluş, son geçerlilik tarihi ve yayınlanma zamanı gibi ayrıntıları içerir. İsteğin orijinalliğini belirlemek için bu verileri kullanın.
Projenizde istek doğrulamayı uygulamak için şu adımları uygulayın:
- JWT'yi, gelen isteklerin
Authorization
üstbilgisinden çıkarın. - Google Auth Kitaplığı'nı kullanarak jetonun kodunu çözün.
- Jetonun
audience
değerini proje kimliğiniz olarak ayarlayın. - Kartı veren kuruluşun, proje kimliğinin ve jeton yükünde yer alan diğer bilgilerin doğru olup olmadığını kontrol edin.
Google Yetkilendirme Kitaplığı
Order with Google'dan gelen mesajları doğrulamak ve web hizmetinizin Google'a gönderdiği mesajlar için yetkilendirme kodları oluşturmak istiyorsanız Google Auth Kitaplığı'nı istediğiniz programlama dilinde kullanın:
- Node.js için Google kimlik doğrulama kitaplığı
- Python için Google kimlik doğrulama kitaplığı
- Java için Google kimlik doğrulama kitaplığı
Bu kitaplıklardan birini indirip web hizmeti uygulama kodunuza ekleyin.
Doğrulama isteğinde bulunma ö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"); }