الترخيص والتحقق

نفِّذ ميزة "التحقّق من رسائل الطلب" للتأكّد من أنّ Google Checkout وطلبات إرسال الطلبات إلى نقطة نهاية توصيل الطلبات وتمنع الجهات الخارجية غير المصرح لها من الاتصال بنقطة النهاية الخاصة بك.

التحقق من الرسائل باستخدام JWT

إنّ الطلبات التي يتم إرسالها إلى نقطة نهاية التنفيذ والصادرة من خوادم "الطلب التام بين الأطراف" تحتوي على رمز JSON المميّز للويب (JWT) موقَّعًا في عنوان Authorization لأغراض الأمان. يتم إنشاء الرمز المميّز من خلال خدمة تفويض مشتركة يمكن طلبها من قِبل كل من Google وتنفيذ نقطة نهاية عملية تنفيذ الطلب.

  1. تنشئ Google رمز JWT موقَّعًا باستخدام خدمة التفويض ومعرّف المشروع الخاص بك لمشروع "طلب الطعام".
  2. ترسل Google الرمز المميّز الموقَّع في عنوان Authorization لكل طلب إلى نقطة نهاية تنفيذ الطلب.
  3. يجب أن تفك نقطة النهاية ترميز الرمز المميّز الموقَّع باستخدام "مكتبة مصادقة Google". ويحتوي الرمز المميّز الذي تم فك ترميزه على تفاصيل، مثل رقم تعريف المشروع وجهة إصداره ووقت انتهاء الصلاحية ووقت الإصدار. استخدِم هذه البيانات لتحديد مدى صحة الطلب.

لتنفيذ عملية التحقّق من الطلب لمشروعك، اتّبِع الخطوات التالية:

  1. يمكنك استخراج JWT من العنوان Authorization للطلبات الواردة.
  2. فك ترميز الرمز المميّز باستخدام مكتبة مصادقة Google.
  3. اضبط audience للرمز المميّز على رقم تعريف مشروعك.
  4. يمكنك التحقُّق من دقة بيانات جهة الإصدار ورقم تعريف المشروع والمعلومات الأخرى المضمّنة في حمولة الرمز المميّز.

مكتبة تفويض Google

للتحقّق من صحة الرسائل الواردة من "الطلب التام بين الأطراف" ولإنشاء رموز تفويض للرسائل التي ترسلها خدمة الويب إلى Google، يمكنك استخدام Google Auth Library بلغة البرمجة التي تختارها:

نزِّل إحدى هذه المكتبات وأضِفها إلى رمز تنفيذ خدمة الويب.

أمثلة على طلب إثبات الملكية

توضّح الأمثلة التالية كيفية تنفيذ عملية التحقّق من الطلب:

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