OAuth की मदद से Google खाता लिंक करना (इंप्लिसिट फ़्लो - संग्रहित किया गया)

OAuth 2.0 इंप्लिसिट फ़्लो के लिए, आपकी सेवा, एचटीटीपीएस के ज़रिए ऑथराइज़ेशन एंडपॉइंट उपलब्ध कराती है. यह एंडपॉइंट, डेटा ऐक्सेस करने के लिए, उपयोगकर्ताओं की पुष्टि करने और उनकी सहमति पाने के लिए ज़िम्मेदार होता है. ऑथराइज़ेशन एंडपॉइंट, आपके उन उपयोगकर्ताओं को साइन-इन यूज़र इंटरफ़ेस (यूआई) दिखाता है जिन्होंने पहले से साइन इन नहीं किया है. साथ ही, यह अनुरोध किए गए ऐक्सेस के लिए सहमति रिकॉर्ड करता है.

जब किसी Google ऐप्लिकेशन को आपकी सेवा के ऑथराइज़ किए गए किसी एपीआई को कॉल करना होता है, तो Google इस एंडपॉइंट का इस्तेमाल करके, आपके उपयोगकर्ताओं से इन एपीआई को उनकी ओर से कॉल करने की अनुमति लेता है.

Google खाता लिंक करना: OAuth इंप्लिसिट फ़्लो

इस क्रम के डायग्राम में, उपयोगकर्ता, Google, और आपकी सेवा के एंडपॉइंट के बीच होने वाले इंटरैक्शन के बारे में बताया गया है.

User Google App / Browser Your Auth Endpoint 1. User initiates linking 2. Redirect to Auth Endpoint (GET) client_id, redirect_uri, state, scope 3. Display Sign-in & Consent Screen 4. User Authenticates & Grants Consent 5. Redirect back to Google with Token (GET) access_token, state 6. Store user tokens 7. Access user resources
Figure 1. Google खाता लिंक करने के लिए, OAuth 2.0 इंप्लिसिट फ़्लो में होने वाली घटनाओं का क्रम.

भूमिकाएं और ज़िम्मेदारियां

इस टेबल में, Google खाता लिंक करने (जीएएल) के OAuth इंप्लिसिट फ़्लो में शामिल लोगों की भूमिकाओं और ज़िम्मेदारियों के बारे में बताया गया है. ध्यान दें कि जीएएल में, Google, OAuth क्लाइंट के तौर पर काम करता है. वहीं, आपकी सेवा, पहचान/सेवा देने वाली कंपनी के तौर पर काम करती है.

Actor / Component GAL Role Responsibilities
Google App / Server OAuth Client यह फ़्लो शुरू करता है, ब्राउज़र रीडायरेक्ट का इस्तेमाल करके ऐक्सेस टोकन हासिल करता है, और आपकी सेवा के एपीआई को ऐक्सेस करने के लिए इसे सुरक्षित तरीके से सेव करता है.
Your Authorization Endpoint Authorization Server यह आपके उपयोगकर्ताओं की पुष्टि करता है, उनकी सहमति लेता है, और Google को सीधे तौर पर, लंबे समय तक इस्तेमाल किए जा सकने वाले ऐक्सेस टोकन जारी करता है.
Google Redirect URI Callback Endpoint यह यूआरएल फ़्रैगमेंट में access_token और state वैल्यू के साथ, आपके ऑथराइज़ेशन सर्वर से उपयोगकर्ता रीडायरेक्ट हासिल करता है.

Google की ओर से शुरू किए गए, OAuth 2.0 इंप्लिसिट फ़्लो के सामान्य सेशन में यह फ़्लो होता है:

  1. Google, उपयोगकर्ता के ब्राउज़र में आपका ऑथराइज़ेशन एंडपॉइंट खोलता है. अगर उपयोगकर्ता ने पहले से साइन इन नहीं किया है, तो वह साइन इन करता है. साथ ही, अगर उसने पहले से अनुमति नहीं दी है, तो वह Google को आपके एपीआई की मदद से अपना डेटा ऐक्सेस करने की अनुमति देता है.
  2. आपकी सेवा, एक ऐक्सेस टोकन बनाती है और इसे Google को वापस भेजती है. ऐसा करने के लिए, उपयोगकर्ता के ब्राउज़र को Google पर वापस रीडायरेक्ट करें. साथ ही, अनुरोध में ऐक्सेस टोकन जोड़ें.
  3. Google, आपकी सेवा के एपीआई को कॉल करता है और हर अनुरोध के साथ ऐक्सेस टोकन जोड़ता है. आपकी सेवा पुष्टि करती है कि ऐक्सेस टोकन से Google को एपीआई ऐक्सेस करने की अनुमति मिली है. इसके बाद, एपीआई कॉल पूरा किया जाता है.

लागू करने की रेसिपी

इंप्लिसिट फ़्लो लागू करने के लिए, यह तरीका अपनाएं.

पहला चरण: ऑथराइज़ेशन के अनुरोधों को मैनेज करना

जब Google, खाता लिंक करने की प्रोसेस शुरू करता है, तो वह उपयोगकर्ता को आपके ऑथराइज़ेशन एंडपॉइंट पर रीडायरेक्ट करता है. प्रोटोकॉल के कॉन्ट्रैक्ट और पैरामीटर की ज़रूरी शर्तों के बारे में ज़्यादा जानने के लिए, ऑथराइज़ेशन एंडपॉइंट देखें.

अनुरोध को मैनेज करने के लिए, यह तरीका अपनाएं:

  1. अनुरोध की पुष्टि करना:

    • पुष्टि करें कि client_id, Google को असाइन किए गए क्लाइंट आईडी से मैच करता हो.
    • पुष्टि करें कि redirect_uri Google के रीडायरेक्ट करने वाले यूआरएल से मैच करता हो: none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
    • पुष्टि करें कि response_type, token हो.
  2. उपयोगकर्ता की पुष्टि करना:

    • देखें कि उपयोगकर्ता ने आपकी सेवा में साइन इन किया है या नहीं.
    • अगर उपयोगकर्ता ने साइन इन नहीं किया है, तो उससे साइन-इन या साइन-अप फ़्लो पूरा करने के लिए कहें.
  3. ऐक्सेस टोकन जनरेट करना:

    • उपयोगकर्ता और क्लाइंट से जुड़ा एक यूनीक ऐक्सेस टोकन बनाएं. ऐसा टोकन बनाएं जिसका अनुमान न लगाया जा सके.
  4. Google पर वापस रीडायरेक्ट करना:

    • ब्राउज़र को redirect_uri में दिए गए यूआरएल पर रीडायरेक्ट करें.
    • यूआरएल फ़्रैगमेंट (हैश) में ये पैरामीटर जोड़ें:
      • access_token: वह ऐक्सेस टोकन जो आपने जनरेट किया है.
      • token_type: यह bearer होना चाहिए.
      • state: Google से मिली, बिना बदलाव वाली स्टेट वैल्यू.
उपयोगकर्ता की जानकारी के अनुरोधों को मैनेज करना

userinfo एंडपॉइंट, OAuth 2.0 से सुरक्षित किया गया एक ऐसा संसाधन है जो लिंक किए गए उपयोगकर्ता के बारे में दावे दिखाता है. नीचे दिए गए इस्तेमाल के उदाहरणों को छोड़कर, userinfo एंडपॉइंट को लागू और होस्ट करना ज़रूरी नहीं है:

आपके टोकन एंडपॉइंट से ऐक्सेस टोकन पाने के बाद, 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 एंडपॉइंट पर अनुरोधों को मैनेज करने के लिए यह तरीका अपनाएं:

  1. ऑथराइज़ेशन हेडर से ऐक्सेस टोकन निकालें और ऐक्सेस टोकन से जुड़े उपयोगकर्ता की जानकारी दिखाएं.
  2. अगर ऐक्सेस टोकन अमान्य है, तो WWW-Authenticate रिस्पॉन्स हेडर का इस्तेमाल करके, एचटीटीपी 401 बिना अनुमति वाली गड़बड़ी दिखाएं. नीचे userinfo गड़बड़ी के जवाब का एक उदाहरण दिया गया है:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    अगर लिंक करने की प्रोसेस के दौरान, बिना अनुमति वाली 401 या गड़बड़ी वाला कोई भी गड़बड़ी का मैसेज मिलता है, तो इस गड़बड़ी को ठीक नहीं किया जा सकेगा. साथ ही, वापस मिले टोकन को खारिज कर दिया जाएगा और उपयोगकर्ता को फिर से लिंक करने की प्रोसेस शुरू करनी होगी.
  3. अगर ऐक्सेस टोकन मान्य है, तो वापस जाएं और एचटीटीपीएस के मुख्य हिस्से में, यहां दिए गए JSON ऑब्जेक्ट के साथ एचटीटीपी 200 रिस्पॉन्स भेजें जवाब:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    अगर आपका userinfo एंडपॉइंट, एचटीटीपी 200 सक्सेस रिस्पॉन्स देता है, तो हासिल किए गए टोकन और दावे, उपयोगकर्ता के Google खाते से रजिस्टर किए जाते हैं.

    userinfo एंडपॉइंट रिस्पॉन्स
    sub एक यूनीक आईडी, जो आपके सिस्टम में उपयोगकर्ता की पहचान करता है.
    email उपयोगकर्ता का ईमेल पता.
    given_name ज़रूरी नहीं: उपयोगकर्ता का नाम.
    family_name ज़रूरी नहीं: उपयोगकर्ता का सरनेम.
    name ज़रूरी नहीं: उपयोगकर्ता का पूरा नाम.
    picture ज़रूरी नहीं: उपयोगकर्ता की प्रोफ़ाइल फ़ोटो.