OAuth 2.0 के इंप्लिसिट फ़्लो के लिए, आपकी सेवा एचटीटीपीएस के ज़रिए ऑथराइज़ेशन एंडपॉइंट उपलब्ध कराती है. यह एंडपॉइंट, पुष्टि करने और डेटा का ऐक्सेस करने के लिए उपयोगकर्ताओं से सहमति लेने का काम करता है. अनुमति देने वाला एंडपॉइंट, उन उपयोगकर्ताओं को साइन इन करने का यूज़र इंटरफ़ेस (यूआई) दिखाता है जिन्होंने पहले से साइन इन नहीं किया है. साथ ही, यह अनुरोध किए गए ऐक्सेस के लिए सहमति रिकॉर्ड करता है.
जब किसी Google ऐप्लिकेशन को आपकी सेवा के किसी ऐसे एपीआई को कॉल करना होता है जिसे अनुमति मिली हुई है, तो Google इस एंडपॉइंट का इस्तेमाल करता है. इससे वह आपके उपयोगकर्ताओं से, उनकी ओर से इन एपीआई को कॉल करने की अनुमति ले पाता है.
Google खाते को किसी दूसरे खाते से लिंक करने की सुविधा: OAuth इंप्लिसिट फ़्लो
इस क्रम के डायग्राम में, उपयोगकर्ता, Google, और आपकी सेवा के एंडपॉइंट के बीच होने वाली इंटरैक्शन की जानकारी दी गई है.
भूमिकाएं और ज़िम्मेदारियां
यहां दी गई टेबल में, Google खाते को किसी दूसरे खाते से लिंक करने की सुविधा (जीएएल) के OAuth इंप्लिसिट फ़्लो में शामिल लोगों की भूमिकाओं और ज़िम्मेदारियों के बारे में बताया गया है. ध्यान दें कि GAL में, Google, OAuth क्लाइंट के तौर पर काम करता है. वहीं, आपकी सेवा, पहचान/सेवा देने वाली कंपनी के तौर पर काम करती है.
| ऐक्टर / कॉम्पोनेंट | जीएएल की भूमिका | ज़िम्मेदारियां |
|---|---|---|
| Google ऐप्लिकेशन / सर्वर | OAuth क्लाइंट | यह फ़्लो शुरू करता है. साथ ही, ब्राउज़र रीडायरेक्ट का इस्तेमाल करके ऐक्सेस टोकन पाता है. इसके अलावा, यह आपकी सेवा के एपीआई को ऐक्सेस करने के लिए, इसे सुरक्षित तरीके से सेव करता है. |
| आपका ऑथराइज़ेशन एंडपॉइंट | अनुमति देने वाला सर्वर | यह कुकी, आपके उपयोगकर्ताओं की पुष्टि करती है, उनकी सहमति लेती है, और Google को सीधे तौर पर लंबे समय तक इस्तेमाल किए जा सकने वाले ऐक्सेस टोकन जारी करती है. |
| Google रीडायरेक्ट यूआरआई | कॉलबैक एंडपॉइंट | यह आपकी अनुमति देने वाली सेवा से उपयोगकर्ता को रीडायरेक्ट करता है. साथ ही, यूआरएल फ़्रैगमेंट में access_token और state वैल्यू शामिल करता है. |
Google की ओर से शुरू किए गए OAuth 2.0 इंप्लिसिट फ़्लो सेशन का सामान्य फ़्लो इस तरह होता है:
- Google, उपयोगकर्ता के ब्राउज़र में आपका ऑथराइज़ेशन एंडपॉइंट खोलता है. अगर उपयोगकर्ता ने पहले से साइन इन नहीं किया है, तो वह साइन इन करता है. इसके बाद, अगर उसने पहले से अनुमति नहीं दी है, तो वह Google को आपके एपीआई के ज़रिए अपना डेटा ऐक्सेस करने की अनुमति देता है.
- आपकी सेवा, एक ऐक्सेस टोकन बनाती है और उसे Google को वापस भेजती है. इसके लिए, उपयोगकर्ता के ब्राउज़र को वापस Google पर रीडायरेक्ट करें. साथ ही, अनुरोध में ऐक्सेस टोकन अटैच करें.
- Google, आपकी सेवा के एपीआई को कॉल करता है और हर अनुरोध के साथ ऐक्सेस टोकन अटैच करता है. आपकी सेवा यह पुष्टि करती है कि ऐक्सेस टोकन, Google को एपीआई ऐक्सेस करने की अनुमति देता है. इसके बाद, एपीआई कॉल पूरा किया जाता है.
लागू करने की रेसिपी
इंप्लिसिट फ़्लो लागू करने के लिए, यह तरीका अपनाएं.
पहला चरण: अनुमति के अनुरोधों को मैनेज करना
जब Google खाता लिंक करने की प्रोसेस शुरू करता है, तो वह उपयोगकर्ता को आपके अनुमति वाले एंडपॉइंट पर रीडायरेक्ट करता है. प्रोटोकॉल के कानूनी समझौतों और पैरामीटर की ज़रूरी शर्तों के बारे में ज़्यादा जानने के लिए, ऑथराइज़ेशन एंडपॉइंट देखें.
अनुरोध को मैनेज करने के लिए, ये कार्रवाइयां करें:
अनुरोध की पुष्टि करें:
- पुष्टि करें कि
client_id, Google को असाइन किए गए क्लाइंट आईडी से मेल खाता हो. - पुष्टि करें कि
redirect_uri, Google के रीडायरेक्ट किए जाने वाले यूआरएल से मेल खाता हो:none https://oauth-redirect.googleusercontent.com/r/YOUR_PARTNER_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PARTNER_ID - पुष्टि करें कि
response_typetokenहै.
- पुष्टि करें कि
उपयोगकर्ता की पुष्टि करना:
- यह कुकी यह पता लगाती है कि उपयोगकर्ता ने आपकी सेवा में साइन इन किया है या नहीं.
- अगर उपयोगकर्ता ने साइन इन नहीं किया है, तो उसे साइन इन या साइन-अप करने के लिए कहें.
ऐक्सेस टोकन जनरेट करें:
- उपयोगकर्ता और क्लाइंट से जुड़ा एक यूनीक ऐक्सेस टोकन बनाएं. यह ऐसा होना चाहिए जिसका अनुमान न लगाया जा सके.
Google पर वापस रीडायरेक्ट करना:
- ब्राउज़र को
redirect_uriमें दिए गए यूआरएल पर रीडायरेक्ट करें. - यूआरएल फ़्रैगमेंट (हैश) में ये पैरामीटर जोड़ें:
access_token: जनरेट किया गया ऐक्सेस टोकन.token_type:bearerहोना चाहिए.state: Google से मिली, बिना बदलाव वाली स्थिति की वैल्यू.
- ब्राउज़र को
उपयोगकर्ता की जानकारी के अनुरोधों को मैनेज करना
userinfo एंडपॉइंट, OAuth 2.0 से सुरक्षित किया गया एक ऐसा संसाधन है जो लिंक किए गए उपयोगकर्ता के बारे में दावे दिखाता है. नीचे दिए गए इस्तेमाल के उदाहरणों को छोड़कर, userinfo एंडपॉइंट को लागू और होस्ट करना ज़रूरी नहीं है:
- Google One Tap की मदद से, लिंक किए गए खाते में साइन इन करें.
- AndroidTV पर बिना किसी रुकावट के सदस्यता.
आपके टोकन एंडपॉइंट से ऐक्सेस टोकन पाने के बाद, Google आपके userinfo एंडपॉइंट पर एक अनुरोध भेजता है, ताकि लिंक किए गए उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी फिर से मिल सके.
| userinfo एंडपॉइंट अनुरोध के हेडर | |
|---|---|
Authorization header |
बेयरर टाइप का ऐक्सेस टोकन. |
उदाहरण के लिए, अगर आपका userinfo एंडपॉइंट यहां उपलब्ध है
https://myservice.example.com/userinfo, अनुरोध कुछ ऐसा दिख सकता है:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
अपने userinfo एंडपॉइंट पर अनुरोधों को मैनेज करने के लिए यह तरीका अपनाएं:
- ऑथराइज़ेशन हेडर से ऐक्सेस टोकन निकालें और ऐक्सेस टोकन से जुड़े उपयोगकर्ता की जानकारी दिखाएं.
- अगर ऐक्सेस टोकन अमान्य है, तो
WWW-Authenticateरिस्पॉन्स हेडर का इस्तेमाल करके, एचटीटीपी 401 बिना अनुमति वाली गड़बड़ी दिखाएं. नीचे userinfo गड़बड़ी के जवाब का एक उदाहरण दिया गया है: अगर लिंक करने की प्रोसेस के दौरान, बिना अनुमति वाली 401 या गड़बड़ी वाला कोई भी गड़बड़ी का मैसेज मिलता है, तो इस गड़बड़ी को ठीक नहीं किया जा सकेगा. साथ ही, वापस मिले टोकन को खारिज कर दिया जाएगा और उपयोगकर्ता को फिर से लिंक करने की प्रोसेस शुरू करनी होगी.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
अगर ऐक्सेस टोकन मान्य है, तो वापस जाएं और एचटीटीपीएस के मुख्य हिस्से में, यहां दिए गए JSON ऑब्जेक्ट के साथ एचटीटीपी 200 रिस्पॉन्स भेजें जवाब:
अगर आपका userinfo एंडपॉइंट, एचटीटीपी 200 सक्सेस रिस्पॉन्स देता है, तो हासिल किए गए टोकन और दावे, उपयोगकर्ता के Google खाते से रजिस्टर किए जाते हैं.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }userinfo एंडपॉइंट रिस्पॉन्स subएक यूनीक आईडी, जो आपके सिस्टम में उपयोगकर्ता की पहचान करता है. emailउपयोगकर्ता का ईमेल पता. given_nameज़रूरी नहीं: उपयोगकर्ता का नाम. family_nameज़रूरी नहीं: उपयोगकर्ता का सरनेम. nameज़रूरी नहीं: उपयोगकर्ता का पूरा नाम. pictureज़रूरी नहीं: उपयोगकर्ता की प्रोफ़ाइल फ़ोटो.