मैं एक RESTful वेब सेवा डिजाइन कर रहा हूं, जिसे उपयोगकर्ताओं द्वारा उपयोग किया जाना चाहिए, लेकिन अन्य वेब सेवाएं और एप्लिकेशन भी। आने वाले सभी अनुरोधों को प्रमाणित करने की आवश्यकता है। सभी संचार HTTPS से अधिक होते हैं। उपयोगकर्ता प्रमाणीकरण एक प्रमाणीकरण टोकन के आधार पर काम करने जा रहा है, जो सेवा द्वारा प्रदान किए गए / सत्र संसाधन के लिए उपयोगकर्ता नाम और पासवर्ड (एक SSL कनेक्शन पर) पोस्ट करके प्राप्त किया गया है।
वेब सेवा ग्राहकों के मामले में, ग्राहक सेवा के पीछे कोई अंतिम उपयोगकर्ता नहीं है । अनुरोध अनुसूचित कार्यों, घटनाओं या कुछ अन्य कंप्यूटर कार्यों द्वारा शुरू किए जाते हैं। कनेक्टिंग सेवाओं की सूची पहले से ज्ञात है (जाहिर है, मुझे लगता है)। मुझे अन्य (वेब) सेवाओं से आने वाले इन अनुरोधों को कैसे प्रमाणित करना चाहिए? मैं चाहता हूं कि प्रमाणीकरण प्रक्रिया उन सेवाओं के लिए लागू करना जितना आसान हो सके, लेकिन सुरक्षा की कीमत पर नहीं। इस तरह के परिदृश्य के लिए मानक और सर्वोत्तम अभ्यास क्या होंगे?
वे विकल्प जो मैं सोच सकता हूं (या मुझे सुझाव दिया गया है):
ग्राहक सेवाओं के लिए एक "नकली" उपयोगकर्ता नाम और पासवर्ड का सहारा लें, और उन्हें उसी तरह प्रमाणित करें जैसे कि उपयोगकर्ता। मुझे यह विकल्प पसंद नहीं है - यह सिर्फ सही नहीं लगता है।
ग्राहक सेवा के लिए एक स्थायी एप्लिकेशन आईडी असाइन करें, संभवतः एक आवेदन कुंजी भी। जहां तक मैंने समझा है कि यह केवल उपयोगकर्ता नाम + पासवर्ड के समान है। इस आईडी और कुंजी के साथ, मैं या तो प्रत्येक अनुरोध को प्रमाणित कर सकता हूं, या आगे के अनुरोधों को प्रमाणित करने के लिए एक प्रमाणीकरण टोकन बना सकता हूं। किसी भी तरह से, मुझे यह विकल्प पसंद नहीं है, क्योंकि जो कोई भी एप्लिकेशन आईडी और कुंजी को पकड़ सकता है, वह ग्राहक को प्रतिरूपित कर सकता है।
मैं पिछले विकल्प के लिए एक आईपी पते की जांच जोड़ सकता है। इससे नकली अनुरोध करने में कठिनाई होगी।
ग्राहक प्रमाण पत्र। अपना स्वयं का प्रमाणपत्र प्राधिकारी सेट करें, रूट प्रमाणपत्र बनाएं और क्लाइंट सेवाओं के लिए ग्राहक प्रमाणपत्र बनाएं। कुछ मुद्दों पर ध्यान आता है, हालांकि: ए) मैं अभी भी कैसे उपयोगकर्ताओं को प्रमाण पत्र के बिना प्रमाणित करने की अनुमति देता हूं और बी) ग्राहक सेवा के दृष्टिकोण से लागू करने के लिए यह परिदृश्य कितना जटिल है?
कुछ और - वहाँ अन्य समाधान होना चाहिए?
मेरी सेवा जावा पर चल रही होगी, लेकिन मैंने जानबूझकर इस बारे में जानकारी छोड़ दी कि इसे किस विशिष्ट ढांचे पर बनाया जाएगा, क्योंकि मैं मूल सिद्धांतों पर अधिक दिलचस्पी रखता हूं और कार्यान्वयन विवरण पर इतना नहीं - मैं इसके लिए सबसे अच्छा समाधान मानता हूं अंतर्निहित ढांचे की परवाह किए बिना लागू करना संभव है। हालांकि, मैं इस विषय के साथ थोड़ा अनुभवहीन हूं, इसलिए वास्तविक कार्यान्वयन (जैसे उपयोगी तीसरे पक्ष के पुस्तकालय, लेख, आदि) पर ठोस सुझाव और उदाहरण भी बहुत सराहना करेंगे।