Yetkilendirme ve doğrulama

Ö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.

  1. Google, yetkilendirme hizmetini ve Yemek Siparişi projenizin proje kimliğini kullanarak imzalı bir JWT oluşturur.
  2. Google, her jetonun Authorization başlığında imzalanan jetonu sipariş karşılama uçunuza gönderir.
  3. 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:

  1. JWT'yi, gelen isteklerin Authorization üstbilgisinden çıkarın.
  2. Google Auth Kitaplığı'nı kullanarak jetonun kodunu çözün.
  3. Jetonun audience değerini proje kimliğiniz olarak ayarlayın.
  4. 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:

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");
}