मुख्य सामग्री पर जाएं

PKCE के साथ OAuth 2.0 ऑथराइज़ेशन कोड फ़्लो

परिचय

OAuth 2.0 एक उद्योग-मानक प्राधिकरण प्रोटोकॉल है, जो किसी एप्लिकेशन के स्कोप पर अधिक नियंत्रण और कई डिवाइसों पर प्राधिकरण फ़्लो की सुविधा देता है। OAuth 2.0 आपको विशिष्ट, सूक्ष्म-स्तर के scopes चुनने की अनुमति देता है, जो उपयोगकर्ता की ओर से आपको खास अनुमतियाँ देते हैं।  अपने ऐप में OAuth 2.0 सक्षम करने के लिए, आपको इसे डेवलपर कंसोल के ऐप सेटिंग्स section में मौजूद अपने ऐप की authentication settings में सक्षम करना होगा।

मेरे क्रेडेंशियल कितने समय तक मान्य रहेंगे?

डिफ़ॉल्ट रूप से, PKCE के साथ OAuth 2.0 ऑथराइज़ेशन कोड फ़्लो के ज़रिए बनाया गया access token केवल दो घंटे तक ही मान्य रहेगा, जब तक कि आपने offline.access scope का इस्तेमाल न किया हो।

रीफ़्रेश टोकन

रीफ़्रेश टोकन किसी एप्लिकेशन को रीफ़्रेश टोकन फ़्लो के माध्यम से उपयोगकर्ता से फिर से अनुमति मांगे बिना नया access token प्राप्त करने की अनुमति देते हैं। यदि offline.access scope लागू किया जाता है, तो एक OAuth 2.0 रीफ़्रेश टोकन जारी किया जाएगा। इस रीफ़्रेश टोकन की मदद से आप एक access token प्राप्त कर सकते हैं। यदि यह scope पास नहीं किया जाता है, तो हम रीफ़्रेश टोकन जनरेट नहीं करेंगे। रीफ़्रेश टोकन का उपयोग करके नया access token प्राप्त करने के लिए किए जाने वाले अनुरोध का एक उदाहरण इस प्रकार है:
POST 'https://api.x.com/2/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'refresh_token=bWRWa3gzdnk3WHRGU1o0bmRRcTJ5VUxWX1lZTDdJSUtmaWcxbTVxdEFXcW5tOjE2MjIxNDc3NDM5MTQ6MToxOnJ0OjE' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'client_id=rG9n6402A3dbUJKzXTNX4oWHJ

ऐप सेटिंग्स

आप अपने ऐप की प्रमाणीकरण सेटिंग्स के लिए OAuth 1.0a या OAuth 2.0 चुन सकते हैं। आप किसी ऐप को OAuth 1.0a और OAuth 2.0, दोनों के एक्सेस के लिए भी सक्षम कर सकते हैं। OAuth 2.0 का उपयोग केवल X API v2 के साथ किया जा सकता है। अगर आपने OAuth 2.0 चुना है, तो आप अपने ऐप के Keys and Tokens सेक्शन में Client ID देख सकेंगे। 

गोपनीय क्लाइंट

गोपनीय क्लाइंट क्रेडेंशियल्स को सुरक्षित रूप से रख सकते हैं, बिना उन्हें अनधिकृत पक्षों के सामने उजागर किए, और authorization server के साथ सुरक्षित रूप से authenticate कर सकते हैं, जिससे आपका client secret सुरक्षित रहता है। Public client, क्योंकि वे आमतौर पर ब्राउज़र में या मोबाइल डिवाइस पर चलते हैं, आपके client secret का उपयोग नहीं कर सकते। यदि आप ऐसे ऐप का type चुनते हैं जो एक गोपनीय क्लाइंट है, तो आपको एक client secret प्रदान किया जाएगा।  यदि आपने डेवलपर कंसोल में ऐसा client type चुना है जो एक गोपनीय क्लाइंट है, तो आप Client Secret भी देख पाएँगे। आपके विकल्प हैं Native App, Single page App, Web App, Automated App, या bot। Native App और Single page App public client हैं, जबकि Web App, Automated App, और bot गोपनीय क्लाइंट हैं। मान्य Authorization Header वाले गोपनीय क्लाइंट के लिए आपको client id की आवश्यकता नहीं होती। Public client के अनुरोधों में आपको अब भी body में Client Id शामिल करना आवश्यक है। 

स्कोप

स्कोप आपको अपने ऐप के लिए सूक्ष्म स्तर की ऐक्सेस सेट करने देते हैं, ताकि आपके ऐप के पास केवल वही अनुमतियाँ हों जिनकी उसे आवश्यकता है। कौन-से स्कोप किन एंडपॉइंट्स से मैप होते हैं, इसके बारे में अधिक जानने के लिए हमारी प्रमाणीकरण मैपिंग गाइड देखें।
स्कोपविवरण
tweet.readवे सभी Tweet जिन्हें आप देख सकते हैं, जिनमें सुरक्षित खातों के Tweet भी शामिल हैं।
tweet.writeआपकी ओर से Tweet और Retweet करें।
tweet.moderate.writeआपके Tweets के जवाब छिपाएँ और फिर से दिखाएँ।
users.emailप्रमाणीकृत उपयोगकर्ता का ईमेल।
users.readकोई भी खाता जिसे आप देख सकते हैं, जिनमें सुरक्षित खाते भी शामिल हैं।
follows.readवे लोग जो आपको फ़ॉलो करते हैं और वे लोग जिन्हें आप फ़ॉलो करते हैं।
follows.writeआपकी ओर से लोगों को फ़ॉलो और अनफ़ॉलो करें।
offline.accessजब तक आप ऐक्सेस रद्द नहीं करते, अपने खाते से जुड़े रहें।
space.readवे सभी Spaces जिन्हें आप देख सकते हैं।
mute.readवे खाते जिन्हें आपने म्यूट किया है।
mute.writeआपकी ओर से खातों को म्यूट और अनम्यूट करें।
like.readवे Tweets जिन्हें आपने लाइक किया है और वे लाइक जिन्हें आप देख सकते हैं।
like.writeआपकी ओर से Tweets को लाइक और अनलाइक करें।
list.readवे सूचियाँ, सूची सदस्य, और सूची फ़ॉलोअर जिन सूचियों को आपने बनाया है या जिनके आप सदस्य हैं, उनमें निजी सूचियाँ भी शामिल हैं।
list.writeआपकी ओर से सूचियाँ बनाएँ और प्रबंधित करें।
block.readवे खाते जिन्हें आपने ब्लॉक किया है।
block.writeआपकी ओर से खातों को ब्लॉक और अनब्लॉक करें।
bookmark.readप्रमाणीकृत उपयोगकर्ता के बुकमार्क किए गए Tweets प्राप्त करें।
bookmark.writeTweets में बुकमार्क जोड़ें और हटाएँ।
media.writeमीडिया अपलोड करें।

रेट लिमिट्स

अधिकांश मामलों में, रेट लिमिट्स OAuth 1.0a के साथ प्रमाणीकरण करते समय जैसी ही हैं, सिवाय Tweet lookup और Users lookup के। OAuth 2.0 का उपयोग करते समय, हम Tweet lookup और user lookup के लिए प्रति-ऐप सीमा को 15 मिनट में 300 अनुरोधों से बढ़ाकर 900 अनुरोध कर रहे हैं। अधिक जानने के लिए, रेट लिमिट्स पर हमारा दस्तावेज़ ज़रूर देखें।

ग्रांट टाइप

इस शुरुआती लॉन्च के लिए हम केवल authorization code with PKCE और refresh token को समर्थित grant types के रूप में उपलब्ध करा रहे हैं। भविष्य में हम और grant types उपलब्ध करा सकते हैं।

OAuth 2.0 फ्लो

OAuth 2.0, OAuth 1.0a के लिए वर्तमान में उपयोग किए जा रहे फ्लो के समान फ्लो का उपयोग करता है। आप इस विषय पर हमारे दस्तावेज़ में इसका आरेख और विस्तृत व्याख्या देख सकते हैं। 

शब्दावली

शब्दविवरण
ग्रांट टाइपOAuth फ़्रेमवर्क अलग-अलग उपयोग स्थितियों के लिए कई grant type निर्दिष्ट करता है, साथ ही नए grant type बनाने का एक फ़्रेमवर्क भी देता है। उदाहरणों में authorization code, client credentials, device code, और refresh token शामिल हैं।
Confidential clientClient ऐसे अनुप्रयोग होते हैं जो authorization server के साथ सुरक्षित रूप से प्रमाणित हो सकते हैं, उदाहरण के लिए अपने पंजीकृत client secret को सुरक्षित रखकर।
Public clientClient पंजीकृत client secret का उपयोग नहीं कर सकते, जैसे ब्राउज़र या मोबाइल डिवाइस पर चलने वाले अनुप्रयोग।
Authorization code flowइसका उपयोग confidential और public, दोनों तरह के client द्वारा authorization code के बदले access token प्राप्त करने के लिए किया जाता है।
PKCEयह authorization code flow का एक extension है, जो कई तरह के हमलों को रोकता है और public client से OAuth exchange को सुरक्षित रूप से करने में सक्षम बनाता है।
Client IDइसे डेवलपर कंसोल के keys and tokens सेक्शन में “Client ID” शीर्षक के अंतर्गत पाया जा सकता है। अगर यह आपको दिखाई नहीं देता, तो कृपया सीधे हमारी टीम से संपर्क करें। authorize URL जनरेट करने के लिए Client ID की आवश्यकता होगी।
Redirect URIआपका callback URL। इसके लिए exact match validation होना आवश्यक है।
Authorization codeयह किसी अनुप्रयोग को उपयोगकर्ताओं की ओर से API को कॉल करने की अनुमति देता है। इसे auth_code कहा जाता है। App owner को उपयोगकर्ता से स्वीकृत auth_code मिलने के बाद auth_code केवल 30 सेकंड के लिए मान्य रहता है। आपको 30 सेकंड के भीतर इसे access token के बदले एक्सचेंज करना होगा, नहीं तो auth_code की अवधि समाप्त हो जाएगी।
Access tokenAccess token वे टोकन हैं जिनका उपयोग अनुप्रयोग किसी उपयोगकर्ता की ओर से API अनुरोध करने के लिए करते हैं।
Refresh tokenयह किसी अनुप्रयोग को refresh token flow के माध्यम से, उपयोगकर्ता को फिर से प्रॉम्प्ट किए बिना, नया access token प्राप्त करने की अनुमति देता है।
Client Secretअगर आपने ऐसा App type चुना है जो confidential client है, तो आपके App के keys and tokens सेक्शन में “Client ID” के अंतर्गत आपको “Client Secret” दिया जाएगा।

पैरामीटर

OAuth 2.0 authorize URL बनाने के लिए, आपको यह सुनिश्चित करना होगा कि authorization URL में नीचे दिए गए पैरामीटर शामिल हों। 
पैरामीटरविवरण
response_typeआपको “code” शब्द का उपयोग करके यह निर्दिष्ट करना होगा कि यह एक code है।
client_idयह डेवलपर कंसोल में “Client ID” शीर्षक के अंतर्गत मिल सकता है।
redirect_uriआपका callback URL। यह मान आपके ऐप की settings में परिभाषित Callback URLs में से किसी एक से बिल्कुल मेल खाना चाहिए। OAuth 2.0 के लिए, आपके callback URL पर exact match validation होना आवश्यक है।
stateएक यादृच्छिक string, जिसे आप CSRF attacks से सुरक्षा के लिए सत्यापन हेतु प्रदान करते हैं।  इस string की लंबाई 500 वर्णों तक हो सकती है।
code_challengeएक PKCE पैरामीटर, जो आपके हर अनुरोध के लिए एक यादृच्छिक secret होता है।
code_challenge_methodउस method को निर्दिष्ट करता है जिसका उपयोग आप अनुरोध करने के लिए कर रहे हैं (S256 OR plain)।

ऑथराइज़ URL

OAuth 2.0 के साथ, आप एक ऑथराइज़ URL बनाते हैं, जिसका उपयोग किसी उपयोगकर्ता को X के “साइन इन” की तरह एक प्रमाणीकरण फ़्लो के ज़रिए प्रमाणित करने की अनुमति देने के लिए किया जा सकता है।  आपके द्वारा बनाए जा रहे URL का एक उदाहरण इस प्रकार है: 
https://x.com/i/oauth2/authorize?response_type=code&client_id=M1M5R3BMVy13QmpScXkzTUt5OE46MTpjaQ&redirect_uri=https://www.example.com&scope=tweet.read%20users.read%20account.follows.read%20account.follows.write&state=state&code_challenge=challenge&code_challenge_method=plain
इस URL के सही तरह से काम करने के लिए उसका उचित encoding होना ज़रूरी है। percent encoding पर हमारा दस्तावेज़ ज़रूर देखें।