Yetkilendirme ve doğrulama

Taşıma son noktanıza gelen Ö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 kullanarak mesaj doğrulama

Sipariş uçtan uca sunucularından gelen ve sipariş tamamlama uç noktanıza gönderilen istekler, güvenlik için Authorization başlığında imzalanmış bir JSON Web Jetonu (JWT) içerir. Jeton, hem Google hem de sipariş tamamlama uç noktası uygulamanız tarafından çağrılabilecek ortak 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, imzalanan jetonu her isteğin Authorization başlığında yerine getirme uç noktanıza gönderir.
  3. Uç noktanız, Google Kimlik Doğrulama Kitaplığı'nı kullanarak imzalanmış jetonun kodunu çözmelidir. Kodu çözülmüş jeton, proje kimliği, ihraç eden, geçerlilik bitiş tarihi ve düzenlenme zamanı gibi ayrıntıları içerir. İsteğin gerçekliğini belirlemek için bu verileri kullanın.

Projeniz için istek doğrulamasını uygulamak üzere aşağıdaki adımları uygulayın:

  1. Gelen isteklerin Authorization üstbilgisinin JWT'sini çıkarın.
  2. Google Kimlik Doğrulama Kitaplığı'nı kullanarak jetonun kodunu çözün.
  3. Jetonun audience değerini proje kimliğinize ayarlayın.
  4. Doğruluğu kontrol etmek için jeton yükünde bulunan ihraççıyı, proje kimliğini ve diğer bilgileri doğrulayın.

Google Yetkilendirme Kitaplığı

Sipariş Uçtan Uca'dan gelen mesajları doğrulamak ve web hizmetinizin Google'a gönderdiği mesajlar için yetkilendirme kodları oluşturmak amacıyla, tercih ettiğiniz programlama dilinde Google Kimlik Doğrulama Kitaplığı'nı kullanın:

Bu kitaplıklardan birini indirip web hizmeti uygulama kodunuza ekleyin.

Doğrulama isteği ö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");
}