Yetkilendirme ve doğrulama

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.

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

  1. Gelen isteklerin Authorization başlığından JWT'yi çıkarın.
  2. Google Auth Kitaplığı'nı kullanarak jetonun kodunu çözün.
  3. Jetonun audience değerini proje kimliğinize ayarlayın.
  4. 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:

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