OAuth 2.0 तकनीकी

इस दस्तावेज़ में, आईएमएपी AUTHENTICATE, पीओपी AUTH, और एसएमटीपी AUTH कमांड के साथ इस्तेमाल किए जाने वाले SASL XOAUTH2 तरीके के बारे में बताया गया है. इस तरीके में, उपयोगकर्ता के Gmail खाते की पुष्टि करने के लिए, OAuth 2.0 ऐक्सेस टोकन का इस्तेमाल किया जा सकता है.

OAuth 2.0 का इस्तेमाल करना

Google API को ऐक्सेस करने के लिए OAuth 2.0 का इस्तेमाल करना के बारे में जानने से शुरुआत करें. इस दस्तावेज़ में बताया गया है कि OAuth 2.0 कैसे काम करता है. साथ ही, क्लाइंट को लिखने के लिए ज़रूरी चरणों के बारे में भी बताया गया है.

काम करने वाले उदाहरणों के लिए, XOAUTH2 कोड का नमूना भी ब्राउज़ किया जा सकता है.

OAuth 2.0 का स्कोप

आईएमएपी, पीओपी, और एसएमटीपी ऐक्सेस का स्कोप https://mail.google.com/ है. अगर आपने अपने आईएमएपी, पीओपी या एसएमटीपी ऐप्लिकेशन के लिए पूरे मेल के दायरे के ऐक्सेस का अनुरोध किया है, तो उसे हमारी Google API सेवाएं: उपयोगकर्ता के डेटा से जुड़ी नीति के मुताबिक होना चाहिए.

  • मंज़ूरी पाने के लिए यह ज़रूरी है कि आपका ऐप्लिकेशन, https://mail.google.com/ का पूरी तरह से इस्तेमाल करता हो.
  • अगर आपके ऐप्लिकेशन में https://mail.google.com/ की ज़रूरत नहीं है, तो Gmail API पर माइग्रेट करें और ज़्यादा जानकारी वाले पाबंदी वाले दायरों का इस्तेमाल करें.

Google Workspaceके लिए पूरे डोमेन का डेलिगेशन

अगर आपको आईएमएपी के ज़रिए, उपयोगकर्ताओं के मेलबॉक्स ऐक्सेस करने के लिए सेवा खातों का इस्तेमाल करना है, तो Google Workspace पूरे डोमेन के डेटा का ऐक्सेस इस्तेमाल करना है. इसके लिए, आपके पास स्कोपhttps://www.googleapis.com/auth/gmail.imap_admin का इस्तेमाल करके क्लाइंट को अनुमति देने का विकल्प है. Google Workspace

इस दायरे में अनुमति मिलने पर, आईएमएपी कनेक्शन अलग तरह से काम करते हैं:

  • सभी लेबल, आईएमएपी के ज़रिए दिखाए जाते हैं. भले ही, उपयोगकर्ताओं ने Gmail सेटिंग में लेबल के लिए "आईएमएपी में दिखाएं" विकल्प को बंद कर दिया हो.
  • सभी मैसेज, आईएमएपी की मदद से दिखाए जाते हैं. भले ही, उपयोगकर्ता ने Gmail सेटिंग में "फ़ोल्डर के साइज़ की सीमाएं" में क्या सेट किया हो.

SASL XOAUTH2 मैकेनिज़्म

XOAUTH2 तरीके से, क्लाइंट सर्वर को OAuth 2.0 ऐक्सेस टोकन भेज सकते हैं. प्रोटोकॉल, कोड में बदली गई वैल्यू का इस्तेमाल करता है, जो नीचे दिए गए सेक्शन में दिखाई गई है.

क्लाइंट का शुरुआती जवाब

SASL XOAUTH2 के शुरुआती क्लाइंट रिस्पॉन्स का फ़ॉर्मैट इस तरह है:

base64("user=" {User} "^Aauth=Bearer " {Access Token} "^A^A")

आरएफ़सी 4648 में बताए गए, base64 कोड में बदलने के तरीके का इस्तेमाल करें. ^A, Control+A (\001) को दिखाता है.

उदाहरण के लिए, base64-एन्कोडिंग से पहले, क्लाइंट का शुरुआती जवाब ऐसा दिख सकता है:

user=someuser@example.com^Aauth=Bearer ya29.vF9dft4qmTc2Nvb3RlckBhdHRhdmlzdGEuY29tCg^A^A

Base64-एन्कोडिंग के बाद, यह स्थिति बन जाती है (साफ़ तौर पर दिखने के लिए लाइन ब्रेक शामिल किए जाते हैं):

dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52
YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0Q2cBAQ==

गड़बड़ी का जवाब

क्लाइंट के शुरुआती जवाब के कारण सर्वर को गड़बड़ी का मैसेज मिलता है और नीचे दिए गए फ़ॉर्मैट में गड़बड़ी के मैसेज वाला एक चैलेंज भेजा जाता है:

base64({JSON-Body})

JSON-Body में तीन वैल्यू होती हैं: status, schemes, और scope. उदाहरण के लिए:

eyJzdGF0dXMiOiI0MDEiLCJzY2hlbWVzIjoiYmVhcmVyIG1hYyIsInNjb3BlIjoiaHR0cHM6Ly9t
YWlsLmdvb2dsZS5jb20vIn0K

Base64-डिकोडिंग के बाद, यह बन जाता है (साफ़ तौर पर फ़ॉर्मैट करने के लिए):

{
  "status":"401",
  "schemes":"bearer",
  "scope":"https://mail.google.com/"
}

एसएएसएल प्रोटोकॉल के लिए, क्लाइंट को इस चैलेंज के लिए कोई खाली जवाब भेजना होगा.

आईएमएपी प्रोटोकॉल एक्सचेंज

इस सेक्शन में, Gmail आईएमएपी सर्वर के साथ SASL XOAUTH2 को इस्तेमाल करने का तरीका बताया गया है.

क्लाइंट का शुरुआती जवाब

SASL XOAUTH2 तरीके के साथ लॉग इन करने के लिए, क्लाइंट XOAUTH2 के मैकेनिज़्म पैरामीटर से AUTHENTICATE कमांड को शुरू करता है और ऊपर बताए गए तरीके से शुरुआती क्लाइंट रिस्पॉन्स देता है. उदाहरण के लिए:

[connection begins]
C: C01 CAPABILITY
S: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST
CHILDREN XYZZY SASL-IR AUTH=XOAUTH2 AUTH=XOAUTH
S: C01 OK Completed
C: A01 AUTHENTICATE XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvb
QFhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG
1semRHRXVZMjl0Q2cBAQ==
S: A01 OK Success
[connection continues...]

आईएमएपी प्रोटोकॉल एक्सचेंज के बारे में ध्यान रखने वाली बातें:

  • आईएमएपी AUTHENTICATE कमांड को आरएफ़सी 3501 में दर्ज किया गया है.
  • SASL-IR की मदद से, AUTHENTICATE कमांड की पहली लाइन में क्लाइंट का शुरुआती जवाब भेजा जा सकता है, ताकि पुष्टि करने के लिए सिर्फ़ एक दोतरफ़ा यात्रा की ज़रूरत हो. एसएएसएल-आईआर को आरएफ़सी 4959 में दर्ज किया गया है.
  • AUTH=XOAUTH2 क्षमता से पता चलता है कि सर्वर इस दस्तावेज़ के मुताबिक तय किए गए SASL सिस्टम के साथ काम करता है. साथ ही, AUTHENTICATE कमांड के पहले तर्क के रूप में XOAUTH2 को तय करके यह मैकेनिज़्म चालू किया जाता है.
  • AUTHENTICATE और CAPABILITY कमांड में जो लाइन ब्रेक दिए गए हैं वे साफ़ तौर पर बताए गए हैं. इन्हें असल कमांड डेटा में नहीं जोड़ा जा सकता. पूरा base64 आर्ग्युमेंट एक लगातार चलने वाली स्ट्रिंग होनी चाहिए. इसमें कोई खाली जगह नहीं होनी चाहिए, ताकि पूरे AUTHENTICATE कमांड में टेक्स्ट की एक लाइन हो.

गड़बड़ी का जवाब

पुष्टि न हो पाने की जानकारी भी आईएमएपी AUTHENTICATE कमांड के ज़रिए दिखाई जाती है:

[connection begins]
S: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST
CHILDREN XYZZY SASL-IR AUTH=XOAUTH2
S: C01 OK Completed
C: A01 AUTHENTICATE XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQ
FhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1s
emRHRXVZMjl0Q2cBAQ==
S: + eyJzdGF0dXMiOiI0MDEiLCJzY2hlbWVzIjoiYmVhcmVyIG1hYyIsInNjb
3BlIjoiaHR0cHM6Ly9tYWlsLmdvb2dsZS5jb20vIn0K
C:
S: A01 NO SASL authentication failed

आईएमएपी प्रोटोकॉल एक्सचेंज के बारे में ध्यान रखने वाली बातें:

  • क्लाइंट, गड़बड़ी के मैसेज वाले चैलेंज के लिए एक खाली रिस्पॉन्स ("\r\n") भेजता है.

पीओपी प्रोटोकॉल एक्सचेंज

इस सेक्शन में, Gmail POP सर्वर के साथ SASL XOAUTH2 को इस्तेमाल करने का तरीका बताया गया है.

क्लाइंट का शुरुआती जवाब

SASL XOAUTH2 तरीके के साथ लॉग इन करने के लिए, क्लाइंट XOAUTH2 के मैकेनिज़्म पैरामीटर से AUTH कमांड को शुरू करता है और ऊपर बताए गए तरीके से शुरुआती क्लाइंट रिस्पॉन्स देता है. उदाहरण के लिए:

[connection begins]
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYX
JlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0
Q2cBAQ==
S: +OK Welcome.
[connection continues...]

पीओपी प्रोटोकॉल एक्सचेंज के बारे में ध्यान रखने वाली बातें:

  • पीओपी AUTH कमांड को आरएफ़सी 1734 में दर्ज किया गया है.
  • AUTH कमांड में जो लाइन ब्रेक दिए गए हैं उन्हें साफ़ तौर पर बताया गया है. इन्हें असल कमांड डेटा में नहीं जोड़ा जा सकता. पूरा base64 आर्ग्युमेंट एक लगातार चलने वाली स्ट्रिंग होनी चाहिए. इसमें कोई खाली जगह नहीं होनी चाहिए, ताकि पूरे AUTH कमांड में टेक्स्ट की एक लाइन हो.

गड़बड़ी का जवाब

पुष्टि न हो पाने की जानकारी भी पीओपी AUTH कमांड के ज़रिए दिखाई जाती है:

[connection begins]
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlY
XJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMj
l0Q2cBAQ==
S: + eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUi
OiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==

एसएमटीपी प्रोटोकॉल एक्सचेंज

इस सेक्शन में, Gmail एसएमटीपी सर्वर के साथ SASL XOAUTH2 को इस्तेमाल करने का तरीका बताया गया है.

क्लाइंट का शुरुआती जवाब

XOAUTH2 तरीके से लॉग इन करने के लिए, क्लाइंट, XOAUTH2 के मैकेनिज़्म पैरामीटर से AUTH कमांड और ऊपर दी गई जानकारी के मुताबिक क्लाइंट के शुरुआती रिस्पॉन्स को शुरू करता है. उदाहरण के लिए:

[connection begins]
S: 220 mx.google.com ESMTP 12sm2095603fks.9
C: EHLO sender.example.com
S: 250-mx.google.com at your service, [172.31.135.47]
S: 250-SIZE 35651584
S: 250-8BITMIME
S: 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
S: 250-ENHANCEDSTATUSCODES
S: 250 PIPELINING
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlY
XJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMj
l0Q2cBAQ==
S: 235 2.7.0 Accepted
[connection continues...]

एसएमटीपी प्रोटोकॉल एक्सचेंज के बारे में ध्यान रखने वाली बातें:

  • एसएमटीपी AUTH कमांड को आरएफ़सी 4954 में दर्ज किया गया है.
  • AUTH कमांड में जो लाइन ब्रेक दिए गए हैं उन्हें साफ़ तौर पर बताया गया है. इन्हें असल कमांड डेटा में नहीं जोड़ा जा सकता. पूरा base64 आर्ग्युमेंट एक लगातार चलने वाली स्ट्रिंग होनी चाहिए. इसमें कोई खाली जगह नहीं होनी चाहिए, ताकि पूरे AUTH कमांड में टेक्स्ट की एक लाइन हो.

गड़बड़ी का जवाब

पुष्टि न हो पाने की जानकारी भी एसएमटीपी AUTH कमांड के ज़रिए दिखाई जाती है:

[connection begins]
S: 220 mx.google.com ESMTP 12sm2095603fks.9
C: EHLO sender.example.com
S: 250-mx.google.com at your service, [172.31.135.47]
S: 250-SIZE 35651584
S: 250-8BITMIME
S: 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
S: 250-ENHANCEDSTATUSCODES
S: 250 PIPELINING
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJl
ciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0Q2cB
AQ==
S: 334 eyJzdGF0dXMiOiI0MDEiLCJzY2hlbWVzIjoiYmVhcmVyIG1hYyIsInNjb
3BlIjoiaHR0cHM6Ly9tYWlsLmdvb2dsZS5jb20vIn0K
C:
S: 535-5.7.1 Username and Password not accepted. Learn more at
S: 535 5.7.1 https://support.google.com/mail/?p=BadCredentials hx9sm5317360pbc.68
[connection continues...]

एसएमटीपी प्रोटोकॉल एक्सचेंज के बारे में ध्यान रखने वाली बातें:

  • क्लाइंट, गड़बड़ी के मैसेज वाले चैलेंज के लिए एक खाली रिस्पॉन्स ("\r\n") भेजता है.

References