Autoryzacja i weryfikacja

Zaimplementuj weryfikację wiadomości z żądaniem, aby mieć pewność, że żądania dotyczące płatności i przesyłania zamówień do punktu końcowego realizacji zamówień będą wysyłane przez Google oraz aby uniemożliwić osobom trzecim wywoływanie Twojego punktu końcowego.

Weryfikacja wiadomości przy użyciu JWT

Ze względów bezpieczeństwa żądania wysyłane do punktu końcowego realizacji zamówienia pochodzące z serwerów obsługujących zamawianie zawierają podpisany token sieciowy JSON (JWT) w nagłówku Authorization. Token jest generowany przez udostępnianą usługę autoryzacji, która może zostać wywołana przez Google i implementację punktu końcowego realizacji zamówień.

  1. Google generuje podpisany token JWT za pomocą usługi autoryzacji i identyfikatora projektu projektu zamawiania jedzenia.
  2. Google wysyła podpisany token w nagłówku Authorization każdego żądania do punktu końcowego realizacji realizacji.
  3. Punkt końcowy musi dekodować podpisany token za pomocą biblioteki uwierzytelniania Google. Zdekodowany token zawiera szczegółowe informacje, takie jak identyfikator projektu, wydawca, czas ważności i czas wystawienia. Na podstawie tych danych ustal autentyczność wniosku.

Aby wdrożyć weryfikację prośby w projekcie, wykonaj te czynności:

  1. Wyodrębnij token JWT z nagłówka Authorization żądań przychodzących.
  2. Zdekoduj token za pomocą biblioteki uwierzytelniania Google.
  3. Ustaw audience tokena na identyfikator projektu.
  4. Sprawdź wydawcę, identyfikator projektu i inne informacje zawarte w ładunku tokena, aby zapewnić dokładność.

Biblioteka autoryzacji Google

Aby zweryfikować wiadomości od kompleksowego zamawiania i wygenerować kody autoryzacji dla wiadomości wysyłanych do Google przez Twoją usługę internetową, użyj biblioteki uwierzytelniania Google w wybranym języku programowania:

Pobierz jedną z tych bibliotek i dodaj ją do kodu implementacji usług internetowych.

Przykłady próśb o weryfikację

Poniższe przykłady pokazują, jak wdrożyć weryfikację prośby:

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