2010-01-07 11 views
8

अरे दोस्तों, ऐसा लगता है कि यह काफी बार चर्चा हुई है, लेकिन मैं रीस्टफुल सेवाओं के साथ प्रमाणीकरण करने के लिए एक सरल, पानी से नीचे सवाल करना चाहता हूं। परिदृश्य इस प्रकार है:पुन: प्रयोक्ता उपयोगकर्ता प्रमाणीकरण सेवा

  • एक ऐसी प्रणाली है जो किसी एप्लिकेशन के लिए पंजीकृत उपयोगकर्ताओं को रखती है। सिस्टम इन उपयोगकर्ताओं तक पहुंचने के लिए एक विश्वसनीय API का खुलासा करता है।
  • एक फ्रंट-एंड एप्लिकेशन है जिसमें लॉगिन फॉर्म है। आवेदन या तो आंतरिक, या बाहरी हो सकता है।
  • फ्रंट-एंड एप्लिकेशन को उपयोगकर्ता को प्रमाणीकृत करने के लिए उपयोगकर्ता सिस्टम में डेटा का उपयोग करने की आवश्यकता है।

अब सवाल यह है कि उपयोगकर्ता के प्रमाणीकरण (उपयोगकर्ता नाम/पासवर्ड) को उपयोगकर्ता सिस्टम में डेटा के विरुद्ध क्लाइंट एप्लिकेशन में दर्ज किया गया है, जैसे कि यह सुरक्षित और निष्पादक है? इस सवाल के लिए, मान लें कि क्लाइंट एप्लिकेशन किसी प्रकार के इंट्रानेट के लिए आंतरिक है लेकिन एप्लिकेशन एक ही मशीन पर नहीं रहेंगे और केवल सेवा के माध्यम से संवाद कर सकते हैं।

मैं एप्लिकेशन को "हाइपर्मियाडिया संचालित" होने का विचार समझता हूं लेकिन हमें फ़िल्टरिंग/खोज सेवाएं प्रदान करने में सक्षम होना चाहिए। उदाहरण के लिए, संसाधनों और नीचे के रूप में एपीआई पर विचार करें:

  • http://example.com/users
    • प्राप्त करें - पुन: प्राप्त करता सभी उपयोगकर्ताओं (संपर्क, हाइपरमीडिया संचालित)
    • पोस्ट - नया उपयोगकर्ता
    • PUT/समर्थित नहीं हटा बनाता है
  • http://example.com/users/[id]
    • प्राप्त करें - आईडी = {id}
    • PUT के साथ एक उपयोगकर्ता की एक पूरी प्रतिनिधित्व रिटर्न - अद्यतन उपयोगकर्ता, किसी भी पूर्वनिर्धारित मीडिया प्रकार
    • DELETE में लेता है - (उपयुक्त प्राधिकार के साथ) उपयोगकर्ता को हटाता
    • पोस्ट समर्थित नहीं

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

विचार?

+1

क्या आप सवाल के बारे में अधिक विशिष्ट हो सकते हैं? मुझे समझने में मुश्किल हो रही है कि आप किस तरह की प्रतिक्रिया चाहते हैं। –

उत्तर

3

सबसे पहले, आप नहीं चाहते कि क्लाइंट प्रमाणीकरण करने के लिए, क्योंकि यह उस ग्राहक को लिखने के लिए तुच्छ होगा जो आपकी सेवा में टूट जाता है।

इसके बजाय, HTTP Basic या HTTP Digest जैसे प्रमाणीकरण तंत्र का उपयोग करें।

ध्यान दें कि यदि आप जावा का उपयोग कर रहे हैं, तो Restlet फ्रेमवर्क इंटरफेसर्स प्रदान करता है, जिन्हें गार्ड कहा जाता है, जो इन और अन्य तंत्र का समर्थन करते हैं। मैं अत्यधिक रेस्टलेट की सिफारिश करता हूं।

6

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो आप एक सामान्य सेवा को कार्यान्वित करना चाहते हैं जो प्रमाणीकरण को संभालेगा, ताकि आप इसे विभिन्न अनुप्रयोगों के लिए फिर से उपयोग कर सकें।

मेरा सुझाव है कि आप OAuth पर एक नज़र डालें जो कि इस समस्या डोमेन के लिए बनाया गया है।

4

उपयोगकर्ता नाम और नमक वापस पास करना अनावश्यक और वास्तविक सुरक्षा जोखिम है।

शायद आप इस दृष्टिकोण पर विचार कर सकते:

ग्राहक Basic Authentication

के माध्यम से सर्वर के लिए उपयोगकर्ता नाम और पासवर्ड पारित सर्वर नमक

wiht साथ उपयोगकर्ता नाम एनक्रिप्टेड पासवर्ड को हासिल करेगा है सर्वर एल्गोरिदम (रूबी कोड निम्न) की सहायता के लिए नमक का उपयोग करके कुछ एन्क्रिप्शन विधि का उपयोग करके दिए गए पासवर्ड को एन्क्रिप्ट करता है:

def User.authenticate(login, password) 
    ok = false 

    user = User.find_by_login(login) 

    if user 
     # 
     # user contains the salt, it isn't passed from the client 
     # 
     expected_password = hash_password(password, user.salt) 

     ok = (user.password == expected_password) 
    end 

    return ok 
end 

इस तरह के दृष्टिकोण का उपयोग करने के लिए कई जगहें हैं लेकिन मुझे इसे रैक में करना पसंद है।

अंतिम बिंदु, एक HTTPS कनेक्शन

0

मोज़िला व्यक्तित्व

के बाद से इस सवाल का पोस्ट किया गया था, Mozilla Foundation (Firefox ब्राउज़र के निर्माता) सरल उपयोगकर्ता प्रमाणीकरण की समस्या पर ले लिया है पर यह सब करते हैं। उनका समाधान Mozilla Persona है, "वेब के लिए साइन-इन सिस्टम"। डेवलपर्स के लिए और उपयोगकर्ताओं के लिए आसान होने के लिए डिज़ाइन किया गया। उपयोगकर्ता की पहचान एक ईमेल पता है। Wikipedia article देखें।

अद्यतन

मोज़िला मूल रूप से व्यक्तित्व पर काम छोड़ दिया लेकिन not quite killed परियोजना गया है।

4

Stormpath

Stormpath डेवलपर्स के लिए एक उपयोगकर्ता लॉगिन प्रबंधन एपीआई और सेवा प्रदान करने के लिए समर्पित कंपनी। वे RESTJSON दृष्टिकोण का उपयोग करते हैं।

ऐसी कुछ अन्य कंपनियां हैं जो प्रमाणीकरण के रूप में प्रमाणीकरण के इस नए क्षेत्र में डूबने लगती हैं, लेकिन स्टॉर्मपाथ एकमात्र ऐसा है जिसे मैं जानता हूं जो इसे समर्पित है।

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