2011-09-12 7 views
9

फेसबुक से access_token प्राप्त करने के लिए, आपको अपने app_id, code को अधिकृत अनुरोध के बाद प्राप्त करना होगा, और आपके ऐप के secret_key'access_token` प्राप्त करने के लिए मुझे `client_secret` क्यों प्रसारित करना चाहिए?

मैं क्यों कभी मेरी गुप्त कुंजी संचारित होगा? यह स्पष्ट रूप से असुरक्षित लगता है। क्या यह OAuth 2.0 spec की आवश्यकता है?

संबंधित प्रश्न के रूप में, मुझे app_id को प्रेषित करने की आवश्यकता क्यों होगी जब मेरा अनुरोध पहले से ही मेरे consumer_key पर हस्ताक्षर हो गया है?

मेरे पास एक काम करने वाला ऐप है, मैं इन आवश्यकताओं को समझ नहीं पा रहा हूं।

+1

एक्सेस टोकन का अनुरोध करते समय गुप्त कुंजी भेजने के लिए [OAuth 2.0 spec] (http://tools.ietf.org/html/draft-ietf-oauth-v2-21) में कोई आवश्यकता नहीं है। –

उत्तर

2

यह OAuth 2.0 spec, section 4.1.3 की आवश्यकता है।

ग्राहक प्रकार गोपनीय है या धारा में वर्णित के रूप ग्राहक साख (या सौंपा अन्य प्रमाणीकरण आवश्यकताओं), ग्राहक प्राधिकरण सर्वर के साथ प्रमाणित करना होगा जारी किया गया था, तो 3.2.1

और section 3.2.1section 2.3 को संदर्भित करता है। विशेष रूप से, section 2.3.1 का कहना है:

वैकल्पिक रूप से, प्राधिकरण सर्वर निम्नलिखित मानकों का प्रयोग करके अनुरोध शरीर में ग्राहक साख सहित अनुमति दे सकता है:

client_id

REQUIRED. The client identifier issued to the client during 
    the registration process described by Section 2.2. 

client_secret

REQUIRED. The client secret. The client MAY omit the 
    parameter if the client secret is an empty string. 

ओएथ 2.0 ऑफ़र वास्तव में अन्य तरीकों से हैं लेकिन इस दृष्टिकोण को चुनकर फेसबुक फेसबुक के साथ अच्छी तरह से है। अब क्यों फेसबुक ने इस दृष्टिकोण का चयन किया, केवल फेसबुक ही जवाब दे सकता है।

+0

क्या 'client_secret'' consumer_secret' से अलग होना चाहिए? मुझे समझ में नहीं आता कि 'customer_id' और' client_secret' क्या 'उपभोक्ता_की' और' उपभोक्ता_सेक्रेट 'प्रदान करता है। –

+2

ग्राहक उपभोक्ता है। इस प्रकार, 'client_secret' वह है जो फेसबुक ऐप सीक्रेट को कॉल करता है। 'Client_id' वह है जो फेसबुक ऐप आईडी/एपीआई कुंजी कहता है। प्रक्रिया में आपकी कुंजी के साथ आपका अनुरोध हस्ताक्षरित नहीं है। जब आप टोकन का अनुरोध करते हैं तो पैरामीटर का उपयोग आपके ऐप को प्रमाणीकृत करने के लिए किया जाता है। – kongo09

+0

यह बहुत विचित्र है कि गुप्त कुंजी कभी भी भेजी जाएगी। कभी। यही कारण है कि यह एक गुप्त कुंजी है। एक पहचानकर्ता, सार्वजनिक कुंजी (वैकल्पिक), और गुप्त कुंजी होना चाहिए। और गुप्त कुंजी पहचानकर्ता और सार्वजनिक कुंजी पर हस्ताक्षर करने के लिए प्रयोग किया जाता है। लेकिन ओएथ एसएसएल को अंत-सभी-सुरक्षा के रूप में विचार कर रहा है। तो यह परवाह नहीं करता है क्योंकि जब आप प्राधिकरण सर्वर के साथ संवाद करते हैं, तो यह हमेशा टीएलएस पर होता है। (आमतौर पर एमएलएस के लिए गुप्त कुंजी का उपयोग किया जाता है। – BradLaney

1

ओथ 2 की आवश्यकता होने के अलावा, क्लाइंट_सेक्रेट को इस चरण में उपयोग करने की आवश्यकता है ताकि आप यह सत्यापित कर सकें कि आप वास्तव में कौन हैं।

यह सब क्यों प्रक्रिया है यह है की तरह करने पर निर्भर करता ...

'कोड' आप पहली बार अनुरोध से वापस पाने के उसके अपने पर एक सुरक्षा के दृष्टिकोण से बहुत कमजोर है। यह रीडायरेक्ट लिंक में आपके रास्ते पर वापस अपहरण कर सकता है, जिसे मैंने अक्सर एसएसएल सुरक्षा के बिना लैंडिंग पृष्ठों पर देखा है। भले ही आप अपनी साइट के बावजूद 100% HTTPS हैं, सब कुछ पूरी तरह से सुरक्षित नहीं है। किसी को आपके वेब सर्वर के एक्सेस लॉग के अंदर लॉग इन करने वाले अनुरोध URL को देखने से कोड मिल सकता है।

भले ही आपको सबसे सख्त सुरक्षा माहौल मिल गया है, बकिंघम पैलेस के इस तरफ से आप सर्वर तक पहुंच नियंत्रित कर रहे हैं, यदि आप कुछ वर्षों से अधिक तकनीकी रोडियो पर सवारी कर रहे हैं, तो आप जानते हैं कि किसी ने कुछ बिंदु 'संग्रह' आपके लॉग कहीं से कम-से-कम सुरक्षित हैं। शायद यूएसबी कुंजी पर उन्होंने स्टारबक्स पर पीछे छोड़ा ...

यदि आप सर्वर साइड एपीआई प्रवाह का उपयोग कर रहे हैं तो इससे बचने के लिए कुछ भी नहीं किया जा सकता है। क्लाइंट ब्राउज़र के अंदर चल रहे जावास्क्रिप्ट के विपरीत, हैश को लॉग इन होने से रोकने के लिए आपके पास टेम्प कोड जोड़ा नहीं जा सकता है, क्योंकि ब्राउज़र क्लाइंट अनुरोध के साथ हैश चिह्न से पहले कुछ भी नहीं भेजते हैं। जेएस रीडायरेक्ट यूआरएल को रोक सकता है, और हैश टैग के बाद सामान को पार्स कर सकता है, यही कारण है कि जेएस ओउथ 2 प्रवाह है जो अतिरिक्त मध्यवर्ती कोड गीत और नृत्य के साथ आसानी से access_token देता है। जेएस पक्ष पर कोई क्लाइंट_Secret की आवश्यकता नहीं है, जो कि जब आप जावास्क्रिप्ट के अंदर पासवर्ड और गुप्त कुंजी डालते हैं तो यह सामान्य रूप से फहराया जाता है।

अब, इस मध्यस्थ कोड को एक बुरे व्यक्ति द्वारा उपयोग टोकन प्राप्त करने के लिए उपयोग करने से रोकने के लिए, क्लाइंट_आईडी और क्लाइंट_Secret को भेजा जाता है ताकि एपीआई सर्वर प्रमाणित कर सके कि आप कौन हैं और आप हैं access_token के लिए कोड को रिडीम करने के लिए प्राधिकरण। साझा साझा रहस्य कुछ भी नहीं!

चूंकि कोड की समयसीमा समाप्त होने से पहले उपयोग की बहुत छोटी खिड़की है - मूल रूप से इसका मतलब है कि इसे तुरंत एक्सेस_टोकन के लिए रिडीम करना है - कोड चोरी करने वाले व्यक्ति का खतरा और क्लाइंट_Secret बल को बल देने की कोशिश करना संभव नहीं है ।

उपयोग की एक छोटी खिड़की और client_secret (बेशक SSL पर) के संयोजन जो आप बाद में आप ग्राहक साख

0

सूचना शब्द .... अनुशंसित नहीं के साथ आदान-प्रदान एक प्रदान करता है।

2.3.1। ग्राहक पासवर्ड

क्लाइंट पासवर्ड के कब्जे में ग्राहक प्रमाणीकरण सर्वर के साथ प्रमाणीकृत करने के लिए [RFC2617] में परिभाषित HTTP मूल प्रमाणीकरण योजना का उपयोग कर सकते हैं। क्लाइंट पहचानकर्ता को "एप्लिकेशन/एक्स-www-form-urlencoded" एन्कोडिंग एल्गोरिदम प्रति परिशिष्ट बी का उपयोग करके एन्कोड किया गया है, और एन्कोडेड मान उपयोगकर्ता नाम के रूप में उपयोग किया जाता है; क्लाइंट पासवर्ड उसी एल्गोरिदम का उपयोग करके एन्कोड किया गया है और पासवर्ड के रूप में उपयोग किया जाता है। प्रमाणीकरण सर्वर को क्लाइंट पासवर्ड जारी किए गए क्लाइंट को प्रमाणित करने के लिए HTTP Basic प्रमाणीकरण योजना का समर्थन करना चाहिए।

उदाहरण के लिए (अतिरिक्त लाइन के साथ प्रदर्शन प्रयोजनों के लिए ही टूट जाता है):

Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3 

वैकल्पिक रूप से, प्राधिकरण सर्वर मई निम्नलिखित मानकों का प्रयोग करके अनुरोध-शरीर में ग्राहक साख सहित समर्थन करते हैं:

client_id आवश्यक। क्लाइंट पहचानकर्ता क्लाइंट को के दौरान धारा 2.2 द्वारा वर्णित पंजीकरण प्रक्रिया के दौरान जारी किया गया।

ग्राहक_सेक्रेट आवश्यक। ग्राहक रहस्य। यदि क्लाइंट गुप्त एक खाली स्ट्रिंग है तो क्लाइंट पैरामीटर को छोड़ सकता है।

अनुरोध शरीर दो मापदंडों का उपयोग करने में ग्राहक साख भी शामिल है अनुशंसित नहीं है और असमर्थ सीधे HTTP मूल प्रमाणीकरण योजना (या अन्य पासवर्ड आधारित HTTP प्रमाणीकरण योजना) का उपयोग करने के लिए ग्राहकों को सीमित होना चाहिए। पैरामीटर केवल अनुरोध-निकाय में प्रेषित किए जा सकते हैं और अनुरोध यूआरआई में शामिल नहीं होना चाहिए।

POST /token HTTP/1.1 
Host: server.example.com 
Content-Type: application/x-www-form-urlencoded 

grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA 
&client_id=s6BhdRkqt3&client_secret=7Fjfp0ZBr1KtDRbnfVdmIw 

प्राधिकरण सर्वर के उपयोग की आवश्यकता चाहिए:

उदाहरण के लिए, एक पहुँच टोकन (धारा 6) शरीर पैरामीटर का उपयोग कर ताज़ा करने के लिए एक अनुरोध (अतिरिक्त लाइन के साथ प्रदर्शन प्रयोजनों के लिए ही टूट जाता है) पासवर्ड प्रमाणीकरण का उपयोग करते हुए अनुरोध भेजते समय अनुभाग 1.6 में वर्णित टीएलएस।

चूंकि इस क्लाइंट प्रमाणीकरण विधि में पासवर्ड शामिल है, प्राधिकरण सर्वर को ब्रूट फोर्स अटैक के विरुद्ध इसका उपयोग करने वाले किसी भी एंडपॉइंट की रक्षा करनी चाहिए।

संबंधित मुद्दे