अनुरोध मैसेज की पुष्टि करने की सुविधा लागू करें, ताकि यह पक्का किया जा सके कि आपके ऑर्डर की पुष्टि करने वाले एंडपॉइंट पर, चेकआउट और ऑर्डर सबमिट करने के अनुरोध, Google से ही आते हैं. साथ ही, बिना अनुमति वाले तीसरे पक्षों को आपके एंडपॉइंट को कॉल करने से रोका जा सके.
JWT का इस्तेमाल करके मैसेज की पुष्टि करना
ऑर्डरिंग एंड-टू-एंड सर्वर से आपके फ़ुलफ़िलमेंट एंडपॉइंट पर आने वाले अनुरोधों में, सुरक्षा के लिए Authorization
हेडर में हस्ताक्षर किया गया
JSON वेब टोकन (JWT) होता है. टोकन को, शेयर की गई ऑथराइज़ेशन सेवा से जनरेट किया जाता है. इसे Google और आपके फ़ुलफ़िलमेंट एंडपॉइंट, दोनों से कॉल किया जा सकता है.
- Google, अनुमति देने वाली सेवा और आपके फ़ूड ऑर्डर करने की सुविधा वाले प्रोजेक्ट के प्रोजेक्ट आईडी का इस्तेमाल करके, साइन किया गया जेडब्लयूटी जनरेट करता है.
- Google, आपके फ़ुलफ़िलमेंट एंडपॉइंट पर हर अनुरोध के
Authorization
हेडर में हस्ताक्षर किया गया टोकन भेजता है. - आपके एंडपॉइंट को Google Auth Library का इस्तेमाल करके, हस्ताक्षर किए गए टोकन को डिकोड करना होगा. डिकोड किए गए टोकन में, प्रोजेक्ट आईडी, जारी करने वाला, खत्म होने का समय, और जारी करने का समय जैसी जानकारी शामिल होती है. अनुरोध की पुष्टि करने के लिए, इस डेटा का इस्तेमाल करें.
अपने प्रोजेक्ट के लिए, अनुरोध की पुष्टि करने की सुविधा लागू करने के लिए, यह तरीका अपनाएं:
- आने वाले अनुरोधों के
Authorization
हेडर से JWT निकालें. - Google Auth Library का इस्तेमाल करके, टोकन को डिकोड करें.
- टोकन के
audience
को अपने प्रोजेक्ट आईडी पर सेट करें. - पुष्टि करने के लिए, टोकन पेलोड में मौजूद जारी करने वाले, प्रोजेक्ट आईडी, और अन्य जानकारी की पुष्टि करें.
Google Authorization Library
ऑर्डरिंग एंड-टू-एंड से मैसेज की पुष्टि करने और अपनी वेब सेवा से Google को भेजे जाने वाले मैसेज के लिए अनुमति कोड जनरेट करने के लिए, अपनी पसंद की प्रोग्रामिंग भाषा में Google Auth Library का इस्तेमाल करें:
- Node.js के लिए Google की पुष्टि करने वाली लाइब्रेरी
- Python के लिए Google की पुष्टि करने वाली लाइब्रेरी
- Java के लिए 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') }) }
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"); }