2012-12-22 20 views
15

उपयोगकर्ता नाम भेजने के बजाय एक REST webservice का उपयोग करते समय प्रमाणीकरण टोकन का उपयोग करने का क्या मूल्य है, हर बार जब आप अनुरोध करते हैं तो HTTPS/एन्क्रिप्शन पर पासवर्ड?आरईएसटी सेवाओं पर प्रमाणीकरण टोकन का बिंदु

मैं समझता हूं कि उदाहरण के लिए ओएयूटीएच के कुछ फायदे हैं क्योंकि आपको तीसरे पक्ष को अपना पासवर्ड देने की आवश्यकता नहीं है, आप भरोसेमंद तृतीय पक्षों को टोकन पास कर सकते हैं जिन्हें आप उपयोगकर्ता नाम/पासवर्ड साझा नहीं करना चाहते हैं..एटीसी

लेकिन इस विशेष लाभ के अलावा मुझे निश्चित रूप से मेरे मामले में आवश्यकता नहीं है, मैं हर बार उपयोगकर्ता नाम/पासवर्ड भेजने के बजाय टोकन का उपयोग क्यों करूंगा।

यह क्लाइंट के लिए जीवन आसान बनाने के लिए हो सकता है, और इसे हर बार उपयोगकर्ता नाम/पासवर्ड भेजने की आवश्यकता नहीं है। ठीक है लेकिन फिर क्लाइंट को मेरे टोकन को याद रखना है और मुझे हर अनुरोध पर टोकन भेजना है। तो उपयोगकर्ता नाम/पासवर्ड को याद/भेजने की बजाय अब टोकन के लिए यह वही होगा! तो ग्राहक कार्यान्वयन कोड कम नहीं मिलता है।

तो असली मूल्य क्या है?

उत्तर

10

यह वास्तव में परिदृश्य पर निर्भर करता है -। अधिक जानने के बिना यह कहना मुश्किल है एपीआई के बारे में - लेकिन "प्रमाणीकरण टोकन" का उपयोग सार्वभौमिक से बहुत दूर है, आप सही हैं कि कई एपीआई को उनकी आवश्यकता नहीं है (और उपयोग नहीं करते)। कई एपीआई को बस प्रत्येक अनुरोध के साथ एक एपीआई कुंजी भेजने की आवश्यकता होती है (अक्सर HTTPS के माध्यम से रोके जाने से यह रोकने के लिए), या उपयोगकर्ता की पहचान (When working with most APIs, why do they require two types of authentication, namely a key and a secret? देखें) साबित करने के लिए उपयोगकर्ता और यह भी एक "गुप्त कुंजी" के साथ एक डिजिटल हस्ताक्षर की पहचान के लिए एक API कुंजी की आवश्यकता है।

उपयोगकर्ता नाम/पासवर्ड नहीं हैं अक्सर सार्वजनिक एपीआई में प्रयोग किया जाता है क्योंकि वे पर्याप्त लचीले नहीं हैं और उपयोगकर्ता पहचान और आवेदन पहचान के बीच पर्याप्त "अलगाव" प्रदान नहीं करते हैं। जैसे आप फ़्लिकर एपीआई का उपयोग करने के लिए डेवलपर के रूप में पंजीकरण करते हैं और उस आईपीआई ऐप का उपयोग करते हुए एक आईफोन ऐप बनाते हैं - क्या आप वास्तव में ऐप में अपना डेवलपर उपयोगकर्ता नाम/पासवर्ड बनाना चाहते हैं? क्या होगा यदि आप बाद में अपना पासवर्ड बदल दें? क्या होगा यदि आप 5 ऐप्स विकसित करना चाहते हैं और उनके लिए अलग-अलग उपयोग ट्रैक करना चाहते हैं और किसी भी समय किसी भी ऐप को प्रभावित किए बिना बंद कर सकते हैं?

हालांकि, उन मामलों के लिए जहां आप वास्तव में केवल एक मानव उपयोगकर्ता की पहचान करना चाहते हैं, एक आवेदन नहीं (उदाहरण के लिए एक निजी एपीआई बैक-एंड जो केवल आपके स्वयं के अनुप्रयोगों की सेवा करेगा, सार्वजनिक एपीआई नहीं), ज्यादातर परिदृश्यों में मैं नहीं करता हूं ' आपके द्वारा सुझाए गए सुझावों के साथ कुछ भी गलत नहीं है, यानी प्रत्येक अनुरोध के साथ HTTPS पर उपयोगकर्ता नाम/पासवर्ड।ओह, वैसे, ऑथ टोकन में "प्रतिबंधित" होने का अतिरिक्त लाभ होता है (एक निश्चित समय पर समाप्त हो सकता है, केवल कुछ कार्यों तक सीमित हो सकता है), लेकिन जाहिर है यह केवल विशिष्ट परिदृश्यों में उपयोगी है।

भी: जैसा कि उपयोगकर्ता "डान" ऊपर बताया, जब एक एपीआई कि प्रत्येक अनुरोध के साथ उपयोगकर्ता नाम/पासवर्ड भेजने की आवश्यकता है (या किसी भी अनुरोध के साथ वास्तव में, भले ही वह सिर्फ लॉगिन अनुरोध है) को डिजाइन करने, सावधान आप कैसे करना हो यह। यदि आप एक तकनीक का उपयोग कर रहे हैं जो ब्राउज़र डिफ़ॉल्ट रूप से समर्थन करता है (जैसे HTTP बेसिक ऑथ), तो आप स्वयं को एपीआई को क्रॉस-डोमेन उपयोगकर्ताओं को सुरक्षित रूप से उजागर करने से रोक रहे हैं (यानी संभवत: आपके एपीआई को ब्राउज़र से सुरक्षित रूप से कभी भी सुरक्षित नहीं कहा जा सकता है , यानी AJAX/फ्लैश/सिल्वरलाइट कोड से)।

यह एक जटिल विषय है जिसे पूरी तरह से समझाया नहीं जा सकता है, लेकिन केवल याद रखें कि यदि आपका एपीआई किसी भी सुरक्षा प्रमाण-पत्र पर निर्भर है जिसे ब्राउजर याद कर सकता है और फिर प्रत्येक अनुरोध में "चुपचाप" इंजेक्ट करता है (उदाहरण के लिए HTTP बेसिक ऑथ , कुकीज़), तो किसी भी क्रॉस-डोमेन तकनीक (सीओआरएस, जेएसओएनपी, crossdomain.xml, आदि) का उपयोग कर उस एपीआई में क्रॉस-डोमेन पहुंच को सक्षम करना सुरक्षित नहीं है।

+0

सभी महान जानकारी लेकिन मैं उलझन में हूं; 1- मुझे अपनी आरईएसटी जर्सी सेवा में उपयोगकर्ता नाम पासवर्ड कैसे भेजना चाहिए, मैं HTTP शीर्षलेख में भेजने की योजना बना रहा था। 2- और क्या आप समझ सकते हैं कि "आप किसी भी क्रॉस-डोमेन तकनीक का उपयोग करके उस एपीआई में क्रॉस-डोमेन पहुंच को सक्षम करने के लिए सुरक्षित नहीं हैं" मेरे पास कोई अजीब विचार नहीं है इसका मतलब क्या हो सकता है :) – Spring

+0

फिर से, यह सब इस पर निर्भर करता है परिदृश्य। क्या यह कई डेवलपर्स या निजी व्यक्ति के लिए एक सार्वजनिक एपीआई है जो सिर्फ आपके अपने अनुप्रयोगों के लिए बैक-एंड प्रदान करता है? क्या आप एपीआई, या मानव अंत उपयोगकर्ता का उपयोग कर आवेदन प्रमाणित करने की कोशिश कर रहे हैं? मैंने जो भी पैराग्राफ (क्रॉस-डोमेन एक्सेस के बारे में) में कहा था, केवल तभी मायने रखता है जब यह एक सार्वजनिक एपीआई * है और * आप चाहते हैं कि लोग ब्राउज़र से इसे एक्सेस कर सकें (यानी AJAX कोड से, फ़्लैश से या सिल्वरलाइट से)। अन्य सभी मामलों में, आप उस सामान को अनदेखा कर सकते हैं। –

+0

यहां tnx मेरा ऐप समझाया गया है; http://stackoverflow.com/questions/13997040/jersey-request-for- प्रमाणीकरण – Spring

1

सबसे अच्छा तरीका मैं इसका उत्तर दे सकता हूं आपको this पृष्ठ को आरईएसटी सुरक्षा का वर्णन करने के लिए इंगित करना है। यह जर्सी के लिए नहीं, विक्ट्री विकी से संबंधित है, लेकिन इसे जर्सी पर भी लागू किया जा सकता है और साथ ही वे दोनों आरईएसटी कार्यान्वयन हैं।

यह लिंक मैं प्रदान की से निकाला जाता है:

"सबसे प्रतिरोध के लिए, सर्वर एक आवेदन स्तर प्रमाणीकरण टोकन के साथ ग्राहक पेश कर सकते हैं, एक अपारदर्शी मूल्य है कि सर्वर सत्यापित कर सकते हैं सही प्रमाणित उपयोगकर्ता के अंतर्गत आता है ।

  • इस तरह के एक तीसरी पार्टी की गणना करने के लिए, उपयोगकर्ता के पहचान क्रेडेंशियल का जैसे एक सर्वर-नमकीन MD5 या SHA1 हैश एक टोकन मुश्किल हो जाना चाहिए।

  • XSRF को हराने के लिए, थी एस अनुप्रयोग-स्तर टोकन को माध्यम से प्रसारित करने की आवश्यकता है कि उपयोगकर्ता-एजेंट स्वचालित रूप से प्रत्येक अनुरोध के साथ वापस नहीं आ जाता है। उदाहरण के लिए, यह इनकोडिंग प्रपत्र इकाई में एक छिपी हुई फ़ील्ड के रूप में एक फार्म के HTML में भेजा जा सकता है और वापस आ POST द्वारा "

+1

लेकिन तीसरी पार्टी के पास हमेशा "/ login" रेस्ट विधि तक पहुंच है, जो कि वे उपयोगकर्ता नाम/पासवर्ड का अनुमान लगाते हुए सर्वर से टोकन "प्राप्त" कर सकते हैं? – Spring

+0

क्या आप यह भी समझा सकते हैं कि "उपयोगकर्ता-एजेंट स्वचालित रूप से प्रत्येक अनुरोध के साथ वापस नहीं आता है" तो यदि मेरी विधि "प्राप्त करें" है तो मैं इसे अनुरोध शीर्षलेख में वापस नहीं भेजूंगा? – Spring

+0

मैंने अपना जवाब अपडेट किया। –

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