অনুমোদন এবং যাচাইকরণ

আপনার পূর্ণতা এন্ডপয়েন্টে চেকআউট এবং জমা অর্ডারের অনুরোধগুলি Google থেকে আসে এবং অননুমোদিত তৃতীয় পক্ষকে আপনার এন্ডপয়েন্টে কল করা থেকে বিরত রাখতে অনুরোধ বার্তা যাচাইকরণ প্রয়োগ করুন।

JWT ব্যবহার করে বার্তা যাচাইকরণ

অর্ডারিং এন্ড-টু-এন্ড সার্ভার থেকে আসা আপনার পূর্ণতা এন্ডপয়েন্টের অনুরোধে নিরাপত্তার জন্য Authorization হেডারে একটি স্বাক্ষরিত JSON ওয়েব টোকেন (JWT) থাকে। টোকেনটি একটি শেয়ার্ড অনুমোদন পরিষেবা দ্বারা জেনারেট করা হয়েছে যা Google এবং আপনার পরিপূর্ণতা শেষ পয়েন্ট বাস্তবায়ন উভয়ের দ্বারাই কল করা যেতে পারে।

  1. Google অনুমোদন পরিষেবা এবং আপনার খাদ্য অর্ডার প্রকল্পের প্রকল্প আইডি ব্যবহার করে একটি স্বাক্ষরিত JWT তৈরি করে।
  2. Google প্রতিটি অনুরোধের Authorization শিরোনামে স্বাক্ষরিত টোকেন আপনার পূরণের শেষ পয়েন্টে পাঠায়।
  3. আপনার এন্ডপয়েন্ট অবশ্যই Google Auth Library ব্যবহার করে স্বাক্ষরিত টোকেন ডিকোড করবে। ডিকোড করা টোকেনে প্রকল্পের আইডি, ইস্যুকারী, মেয়াদ শেষ হওয়ার সময় এবং ইস্যু করা সময়ের মতো বিশদ বিবরণ রয়েছে। অনুরোধের সত্যতা নির্ধারণ করতে এই ডেটা ব্যবহার করুন।

আপনার প্রকল্পের জন্য অনুরোধ যাচাইকরণ বাস্তবায়ন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আগত অনুরোধের Authorization শিরোনাম থেকে JWT বের করুন।
  2. Google Auth Library ব্যবহার করে টোকেনটি ডিকোড করুন।
  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')
  })
}
    

পাইথন

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