مجوز و تأیید

تأیید پیام درخواست را برای اطمینان از اینکه درخواست‌های Checkout و ارسال سفارش به نقطه پایانی انجام شما از طرف Google می‌آیند و از تماس اشخاص ثالث غیرمجاز با نقطه پایانی شما جلوگیری می‌کند، اجرا کنید.

تأیید پیام با استفاده از JWT

درخواست‌هایی به نقطه پایانی شما که از سفارش سرورهای End-to-End می‌آیند حاوی یک نشانه وب JSON (JWT) امضا شده در سرصفحه Authorization برای امنیت هستند. توکن توسط یک سرویس مجوز مشترک ایجاد می‌شود که می‌تواند توسط Google و اجرای نقطه پایانی شما فراخوانی شود.

  1. Google با استفاده از سرویس مجوز و شناسه پروژه پروژه سفارش غذای شما، یک JWT امضا شده ایجاد می‌کند.
  2. Google رمز امضا شده در سرصفحه Authorization هر درخواست را به نقطه پایانی شما ارسال می کند.
  3. نقطه پایانی شما باید رمز امضا شده را با استفاده از کتابخانه Google Auth رمزگشایی کند. توکن رمزگشایی شده حاوی جزئیاتی مانند شناسه پروژه، صادرکننده، زمان انقضا و زمان صدور است. از این داده ها برای تعیین صحت درخواست استفاده کنید.

برای اجرای تأیید درخواست برای پروژه خود، این مراحل را دنبال کنید:

  1. JWT را از سربرگ Authorization درخواست های دریافتی استخراج کنید.
  2. رمز را با استفاده از کتابخانه Google Auth رمزگشایی کنید.
  3. audience توکن را روی ID پروژه خود تنظیم کنید.
  4. صادرکننده، شناسه پروژه و سایر اطلاعات موجود در محموله توکن را برای صحت بررسی کنید.

کتابخانه مجوز Google

برای تأیید پیام‌ها از Ordering End-to-End و ایجاد کدهای مجوز برای پیام‌هایی که سرویس وب شما به Google ارسال می‌کند، از کتابخانه Google Auth به زبان برنامه‌نویسی انتخابی خود استفاده کنید:

یکی از این کتابخانه ها را دانلود و به کد پیاده سازی وب سرویس خود اضافه کنید.

نمونه های تایید را درخواست کنید

مثال‌های زیر نحوه اجرای تأیید درخواست را نشان می‌دهند:

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')
  })
}
    

پایتون

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'
    

جاوا

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