Autoryzacja i weryfikacja

Zaimplementuj weryfikację wiadomości z prośbą o zgodę, aby mieć pewność, że żądania usługi Checkout i przesyłania zamówień do Twojego punktu końcowego realizacji pochodzą od Google i uniemożliwiają nieautoryzowanym osobom trzecim wywołanie punktu końcowego.

Weryfikowanie wiadomości przy użyciu tokena JWT

Żądania wysyłane do punktów końcowych realizacji, które pochodzą z serwerów Order with Google, zawierają w podpisie token sieciowy JSON (JWT) z nagłówka Authorization. Token jest generowany przez wspólną usługę autoryzacji, która może zostać wywołana zarówno przez Google, jak i Twoją implementację punktu końcowego realizacji.

  1. Google generuje podpisany token JWT z użyciem usługi autoryzacji i identyfikatora projektu projektu zamawiania jedzenia.
  2. Google wyśle podpisany token w nagłówku Authorization każdego żądania do punktu końcowego realizacji.
  3. Twój punkt końcowy musi zdekodować podpisany token przy użyciu biblioteki uwierzytelniania Google. Zdekodowany token zawiera takie informacje jak identyfikator projektu, wydawca, czas ważności i czas wysłania. Użyj tych danych, aby określić autentyczność żądania.

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ź, czy wydawca, identyfikator projektu i inne informacje zawarte w ładunku tokena są poprawne.

Biblioteka autoryzacji Google

Aby zweryfikować wiadomości od firmy Order with Google i wygenerować kody autoryzacji dla wiadomości wysyłanych do Twojej usługi internetowej, użyj biblioteki uwierzytelniania Google w wybranym języku programowania:

Pobierz jedną z tych bibliotek i dodaj ją do kodu implementacji usługi internetowej.

Przykłady próśb o weryfikację

Poniższe przykłady pokazują, jak wdrożyć żądanie weryfikacji:

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