2013-01-10 13 views
40

OAuth 1.0, 2-पैर में बहुत आसानी से है: बस हमेशा की तरह अनुरोध भेजने और access_token हैडर छोड़ देते हैं।ओथ 2.0 में 2-पैर वाली ओथ कैसे काम करता है?

हालात OAuth 2.0 में बदल दिया है (काफी, के रूप में मैं आज पता चला :)) लगता है। OAuth 2.0 में, अनुरोध अब इस तरह के अस्थायी रूप से, उपभोक्ता कुंजी, टाइमस्टैम्प आदि के रूप में हेडर है यह सिर्फ ने ले ली है:

Authorization: OAuth ya29.4fgasdfafasdfdsaf3waffghfhfgh 

मैं समझता हूँ कि कैसे 3 पैर प्राधिकरण OAuth 2.0 में काम करते हैं और आवेदन बहती है। लेकिन 2.0 में 2-पैर वाले काम कैसे करते हैं? क्या एक एपीआई डिज़ाइन करना संभव है जो 2-पैर वाले और 3-पैर वाले ओएथ 2.0 दोनों का समर्थन कर सके?

मैं इस बारे में जानकारी के लिए खोज की है, लेकिन मैं 1.0 के लिए 2-पैर पर सामान का एक बहुत खोजने किया गया है और 2.0 के लिए लगभग कुछ भी नहीं।

+3

आपके साथ सहमत हैं, 3-पैर वाले ओथ 2.0, या 2-पैर वाले ओथ 1.0 के लिए पर्याप्त जानकारी है, लेकिन 2-पैर वाले ओथ 2.0 के लिए शायद ही कुछ भी है। – skyfree

उत्तर

55

अनुसंधान के बहुत सारे के बाद, मुझे पता चला कि client_credentials अनुदान प्रकार इस परिदृश्य के लिए है। एक बार जब आप Google को इस शब्द को पंच करते हैं, तो आप बहुत उपयोगी संसाधनों का भार पा सकते हैं।

इस 3-लेग्ड OAuth 2.0 के लिए सामान्य प्रवाह है (हम प्रवेश करने के लिए उपयोगकर्ता चाहते हैं):

मान लें हम प्रमाणीकरण के लिए हमारे एप्लिकेशन में निम्न अंतिमबिंदुओं है:

/oauth/auth 

/oauth/token 

आम तौर पर (प्राधिकरण कोड अनुदान) के लिए, हम /oauth/auth?state=blah&client_id=myid&redirecturl=mysite.com/blah

प्रमाणीकरण पर

तब करने के लिए उपयोगकर्ता प्रत्यक्ष, उपयोगकर्ता mysite.com/blah?code=somecode

पर भेज दिया जाएगा 10

हम somecode प्राप्त करते हैं और /oauth/token?code=somecode&client_id=myid&client_secret=mysecret

का उपयोग करके टोकन के लिए इसका आदान-प्रदान करते हैं, फिर हम कॉल करने के लिए टोकन का उपयोग कर सकते हैं।


यह client_credentials के लिए आवेदन प्रवाह 2-चरणीय OAuth 2.0 है, जो स्पष्ट रूप से सरल है लागू करने के लिए है:

  • इस दृष्टिकोण में, हम किसी भी प्रमाणीकरण प्रदर्शन करने की जरूरत नहीं है।
  • हम केवल निम्न प्रपत्र डेटा के साथ /oauth/token पर पोस्ट करें:

    grant_type=client_credentials&scope=view_friends 
    

ध्यान दें कि गुंजाइश वैकल्पिक है। एंडपॉइंट तब हमारे लिए उपयोग करने के लिए सीधे पहुंच टोकन देता है (कोई रीफ्रेश टोकन प्रदान नहीं किया जाता है)। चूंकि टोकन की समयसीमा समाप्त होने पर कोई ताज़ा टोकन प्रदान नहीं किया जाता है, इसलिए आपको पुनः प्रमाणित करने और एक नया पूछने की आवश्यकता होगी।

यह निम्न चेतावनियां की ओर जाता है:

  • उपयोग इस तरह के आंतरिक उपयोग के रूप में इस के लिए ही (बहुत बहुत) पर भरोसा किया अनुप्रयोगों।
  • आपको प्रमाणित करने के लिए अपने तरीके से डिवाइस की आवश्यकता है। उदाहरण के लिए, RFC's example मूल लेख का उपयोग करता है।

एक अन्य समाधान जेडब्ल्यूटी (जेएसओएन वेब टोकन) का उपयोग करना है जैसे google OAuth API। यह एक बहुत ही जटिल प्रक्रिया है, लेकिन आपके जेडब्ल्यूटी को उत्पन्न करने के लिए कई पुस्तकालय मौजूद हैं।

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=generated_jwt 

यह /oauth/token को पोस्ट किया जाता है अपने टोकन प्राप्त करने: फिर आप निम्न प्रपत्र डेटा (यूआरएल निश्चित रूप से इनकोडिंग) पोस्ट करते हैं।


का सवाल आप एक API कि 2-पैर और 3-लेग्ड OAuth 2.0, हाँ, यह संभव है का समर्थन करता है बना सकते हैं कि क्या का सवाल है।

फिर /auth एंडपॉइंट केवल तभी उपयोग किया जाता है जब उपयोगकर्ताओं को सेवा के विरुद्ध प्रमाणित करने की आवश्यकता होती है।

/token endpoint में, बस urn:ietf:params:oauth:grant-type:jwt-bearer के लिए GET पैरामीटर में grant_type के मान की जाँच करता है, तो client_credentials के लिए जेडब्ल्यूटी या client_credentials का उपयोग कर।

ध्यान दें कि उपयोगकर्ता को देने के लिए क्लाइंट_आईडी और क्लाइंट_सेक्रेट उत्पन्न करते समय, यदि आप एकाधिक grant_types का समर्थन कर रहे हैं, तो सुनिश्चित करें कि आपके पास डेटाबेस कॉलम है कि किस प्रकार का अनुदान आईडी और गुप्त उत्पन्न हुआ था। यदि प्रति उपयोगकर्ता एकाधिक अनुदान प्रकारों की आवश्यकता होती है, तो प्रत्येक अनुदान प्रकार के लिए प्रमाण-पत्रों का एक अलग सेट उत्पन्न करें।

+2

यदि आप चाहते हैं कि आप Google के कार्यान्वयन की भी जांच कर सकें। उदाहरण के लिए डेवलपर अनुभव यहां दस्तावेज किया गया है: https://developers.google.com/drive/delegation और हाँ मूल रूप से क्लाइंट प्रमाण-पत्र और विशेष 'सेवा खाते' का उपयोग करके आप डोमेन की व्यापक पहुंच का प्रतिनिधित्व करते हैं। – Nivco

+1

हैलो निवो, मैं एक Google एपीआई संबंधित परियोजना पर काम कर रहा हूं, और 2-पैर वाले ओथ 2.0 के बारे में पर्याप्त जानकारी/ज्ञान नहीं मिला। उपर्युक्त आपका लिंक वास्तव में मदद करता है, हालांकि, मेरा प्रश्न है: Google कैलेंडर एपीआई, Google संपर्क एपीआई और जीमेल आईएमएपी एक्सओयूथ के बारे में क्या? क्या वे 2-पैर वाले ओथ 2 का समर्थन करते हैं? धन्यवाद – skyfree

+1

Google के 2-पैर वाले OAuth2 कार्यान्वयन के बारे में अधिक जानकारी के लिए आप निम्न लिंक भी देख सकते हैं: https: //developers.google.com/accounts/docs/OAuth2ServiceAccount। इसके अलावा, Google के 2-पैर वाले OAuth2 के माध्यम से प्राप्त टोकन तक पहुंच सभी Google API (कैलेंडर, संपर्क इत्यादि सहित) द्वारा समर्थित है, इस पर अधिक जानकारी के लिए http://stackoverflow.com/questions/20127114/which-google- apis-support-OAuth2-डोमेन-चौड़े प्रतिनिधिमंडल/20,135,458 # 20,135,458। उम्मीद है कि मदद करता है। –

1

आप 2-legged OAuth2 के Google के कार्यान्वयन को भी देख सकते हैं (मुझे विश्वास है कि यह दस्तावेज़ केवल हाल ही में प्रकाशित किया गया है)।

Google Drive SDK delegation docs को Google के 2-पैर वाले OAuth2 कार्यान्वयन को समझने में भी मदद करनी चाहिए।