OAuth के साथ Google खाता लिंक करना

खातों को लिंक करने के लिए, इंडस्ट्री के स्टैंडर्ड OAuth 2.0 ऑथराइज़ेशन कोड फ़्लो का इस्तेमाल किया जाता है.

एजेंट के लिए OAuth 2.1 और पीकेसीई

स्टेटलेस एआई एजेंट और मल्टी-मॉडल पाइपलाइन के लिए, OAuth 2.1 को लागू करने का सुझाव दिया जाता है.

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

आपकी सेवा में, OAuth 2.0/2.1 के मुताबिक ऑथराइज़ेशन और टोकन एक्सचेंज एंडपॉइंट काम करने चाहिए.

Create the project

To create your project to use account linking:

  1. Go to the Google API Console.
  2. Click Create project.
  3. Enter a name or accept the generated suggestion.
  4. Confirm or edit any remaining fields.
  5. Click Create.

To view your project ID:

  1. Go to the Google API Console.
  2. Find your project in the table on the landing page. The project ID appears in the ID column.

The Google Account Linking process includes a consent screen which tells users the application requesting access to their data, what kind of data they are asking for and the terms that apply. You will need to configure your OAuth consent screen before generating a Google API client ID.

  1. Open the OAuth consent screen page of the Google APIs console.
  2. If prompted, select the project you just created.
  3. On the "OAuth consent screen" page, fill out the form and click the “Save” button.

    Application name: The name of the application asking for consent. The name should accurately reflect your application and be consistent with the application name users see elsewhere. The application name will be shown on the Account Linking consent screen.

    Application logo: An image on the consent screen that will help users recognize your app. The logo is shown on Account linking consent screen and on account settings

    Support email: For users to contact you with questions about their consent.

    Scopes for Google APIs: Scopes allow your application to access your user's private Google data. For the Google Account Linking use case, default scope (email, profile, openid) is sufficient, you don’t need to add any sensitive scopes. It is generally a best practice to request scopes incrementally, at the time access is required, rather than up front. Learn more.

    Authorized domains: To protect you and your users, Google only allows applications that authenticate using OAuth to use Authorized Domains. Your applications' links must be hosted on Authorized Domains. Learn more.

    Application Homepage link: Home page for your application. Must be hosted on an Authorized Domain.

    Application Privacy Policy link: Shown on Google Account Linking consent screen. Must be hosted on an Authorized Domain.

    Application Terms of Service link (Optional): Must be hosted on an Authorized Domain.

    Figure 1. Google Account Linking Consent Screen for a fictitious Application, Tunery

  4. Check "Verification Status", if your application needs verification then click the "Submit For Verification" button to submit your application for verification. Refer to OAuth verification requirements for details.

अपना OAuth सर्वर लागू करना

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

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

Google खाते को किसी दूसरे खाते से लिंक करने की सुविधा: OAuth ऑथराइज़ेशन कोड फ़्लो

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

User Google App / Browser Google Server Your Auth Endpoint Your Token Endpoint 1. उपयोगकर्ता खाता लिंक करने की प्रोसेस शुरू करता है 2. रीडायरेक्ट टू ऑथ एंडपॉइंट (GET) client_id, redirect_uri, state, scope 3. Display Sign-in & Consent Screen 4. उपयोगकर्ता पुष्टि करता है और सहमति देता है 5. Google पर वापस रीडायरेक्ट करें (GET) code, state 6. रीडायरेक्ट को मैनेज करें और कोड/स्टेट पास करें 7. टोकन एक्सचेंज (POST) grant_type=authorization_code, code 8. Return Tokens (200 OK) access_token, refresh_token 9. स्टोर के उपयोगकर्ता टोकन 10. उपयोगकर्ता के संसाधनों को ऐक्सेस करना
पहली इमेज. Google खाते को किसी दूसरे खाते से लिंक करने की सुविधा के लिए, OAuth 2.0 के ऑथराइज़ेशन कोड फ़्लो में इवेंट का क्रम.

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

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

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

Google की ओर से शुरू किए गए OAuth 2.0 ऑथराइज़ेशन कोड फ़्लो सेशन का फ़्लो इस तरह होता है:

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

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

ऑथराइज़ेशन कोड फ़्लो लागू करने के लिए, यह तरीका अपनाएं.

पहला चरण: अनुमति के अनुरोधों को मैनेज करना

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

अनुरोध को मैनेज करने के लिए, ये कार्रवाइयां करें:

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

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

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

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

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

दूसरा चरण: टोकन एक्सचेंज करने के अनुरोधों को मैनेज करना

टोकन एक्सचेंज एंडपॉइंट, दो तरह के अनुरोधों को प्रोसेस करता है: कोड के बदले टोकन पाना और समयसीमा खत्म हो चुके ऐक्सेस टोकन को रीफ़्रेश करना. प्रोटोकॉल के बारे में ज़्यादा जानकारी और पैरामीटर से जुड़ी ज़रूरी शर्तों के लिए, टोकन एक्सचेंज एंडपॉइंट देखें.

A. टोकन के लिए ऑथराइज़ेशन कोड बदलना

जब Google को ऑथराइज़ेशन कोड मिलता है, तो वह टोकन पाने के लिए, आपके टोकन एक्सचेंज एंडपॉइंट (POST) को कॉल करता है.

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

    • client_id और client_secret की पुष्टि करें.
    • पुष्टि करें कि ऑथराइज़ेशन कोड मान्य हो और उसकी समयसीमा खत्म न हुई हो.
    • पुष्टि करें कि redirect_uri, पहले चरण में इस्तेमाल की गई वैल्यू से मेल खाता हो.
    • पुष्टि न होने पर, {"error": "invalid_grant"} के साथ HTTP 400 Bad Request दिखाएं.
  2. टोकन जारी करना:

    • लंबे समय तक इस्तेमाल किया जा सकने वाला refresh_token और कम समय के लिए इस्तेमाल किया जा सकने वाला access_token (आम तौर पर, एक घंटे के लिए) जनरेट करें.
    • स्टैंडर्ड JSON टोकन रिस्पॉन्स के साथ एचटीटीपी 200 OK वापस भेजें.

B. ऐक्सेस टोकन रीफ़्रेश करना

ऐक्सेस टोकन की समयसीमा खत्म होने पर, Google रीफ़्रेश टोकन का इस्तेमाल करके नए टोकन का अनुरोध करता है.

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

    • client_id, client_secret, और refresh_token की पुष्टि करें.
    • पुष्टि न होने पर, {"error": "invalid_grant"} के साथ HTTP 400 Bad Request दिखाएं.
  2. नया ऐक्सेस टोकन जारी करें:

    • कम समय के लिए मान्य नई access_token जनरेट करें.
    • JSON टोकन रिस्पॉन्स के साथ एचटीटीपी 200 OK लौटाएं. इसमें नया रीफ़्रेश टोकन शामिल करना ज़रूरी नहीं है.
उपयोगकर्ता की जानकारी के अनुरोधों को मैनेज करना

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 ज़रूरी नहीं: उपयोगकर्ता की प्रोफ़ाइल फ़ोटो.

लागू करने की पुष्टि करना

OAuth 2.0 Playground टूल का इस्तेमाल करके, लागू करने की पुष्टि की जा सकती है.

टूल में, यह तरीका अपनाएं:

  1. OAuth 2.0 कॉन्फ़िगरेशन विंडो खोलने के लिए, कॉन्फ़िगरेशन पर क्लिक करें.
  2. OAuth फ़्लो फ़ील्ड में, क्लाइंट-साइड चुनें.
  3. OAuth एंडपॉइंट फ़ील्ड में, कस्टम चुनें.
  4. अपने OAuth 2.0 एंडपॉइंट और Google को असाइन किया गया क्लाइंट आईडी, उससे जुड़े फ़ील्ड में डालें.
  5. पहला चरण सेक्शन में, कोई भी Google स्कोप न चुनें. इसके बजाय, इस फ़ील्ड को खाली छोड़ दें या अपने सर्वर के लिए मान्य स्कोप टाइप करें. अगर OAuth स्कोप का इस्तेमाल नहीं किया जाता है, तो कोई भी स्ट्रिंग टाइप करें. जब आपका काम पूरा हो जाए, तो एपीआई को अनुमति दें पर क्लिक करें.
  6. दूसरे चरण और तीसरे चरण सेक्शन में, OAuth 2.0 फ़्लो देखें. साथ ही, यह पुष्टि करें कि हर चरण उम्मीद के मुताबिक काम कर रहा है.

Google खाता लिंक करने की सुविधा का डेमो टूल का इस्तेमाल करके, लागू की गई सुविधा की पुष्टि की जा सकती है.

टूल में, यह तरीका अपनाएं:

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