/ / स्प्रिंग बूट वेब एप्लिकेशन में REST API को कैसे सुरक्षित करें? - आराम, वसंत-बूट, वसंत-सुरक्षा

स्प्रिंग बूट वेब एप्लिकेशन में आरईएसटी एपीआई कैसे सुरक्षित करें? - आराम, वसंत-बूट, वसंत-सुरक्षा

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

किसी भी बिंदु पर मेरे पास पहले एप्लिकेशन को चलाने का एक उदाहरण और 2 के वेब एप्लिकेशन के कई इंस्टेंस चल रहे होंगे।

मैं 1 वेब एप्लिकेशन से REST एपीआई को चलाना चाहता हूं (एक उदाहरण चल रहा है) और दूसरी वेब एप्लिकेशन से उस REST एपीआई का उपयोग करने में सक्षम होने के लिए (कई उदाहरण चल रहे हैं)।

मैं यह कैसे सुनिश्चित करूं कि REST API को उचित प्रमाणीकरण और केवल 2 एप्लिकेशन के इंस्टेंस द्वारा सुरक्षित रूप से एक्सेस किया जा सकता है।

उत्तर:

जवाब के लिए 3 № 1

यदि आप अपनी सुरक्षा बदल सकते हैं, तो मैं आपको OAUTH2 का उपयोग करने की सलाह दूंगा। मूल रूप से यह एक एपीआई उत्पन्न करता है जिसका उपयोग एपीआई कॉल करने के लिए आपके APP2 उदाहरणों में किया जाता है। आप यहाँ और देख सकते हैं।

https://spring.io/guides/tutorials/spring-boot-oauth2/

http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/

लेकिन अगर आप "अपने एपीपी की सुरक्षा को बदल नहीं सकते हैं, तो आपअपने वर्तमान स्कीमा का उपयोग जारी रख सकते हैं। एपीपी 1 में आप एपीआई कॉल के लिए एक उपयोगकर्ता बना सकते हैं, इस उपयोगकर्ता के पास केवल एपीआई सेवाओं तक पहुंच है। अपने APP2 में आपको APP1 तक पहुंचने के लिए क्रेडेंशियल्स को स्टोर करने की आवश्यकता है। अंत में आप APP1 में लॉगिन करते हैं और HTTP क्लाइंट का उपयोग करके एपीआई को इनवॉइस करते हैं, आप स्प्रिंग रेस्टेमप्लेट या अपाचे HttpCompords क्लाइंट का उपयोग कर सकते हैं।


जवाब के लिए 0 № 2

यदि आप सुरक्षा पहलुओं के बारे में गंभीरता से सोच रहे हैं तो एसएसएल आधारित प्रमाणीकरण एक विकल्प हो सकता है।

मान लें कि आप ऐप 1 के द्वारा REST एपीआई को HTTP पर समाप्त कर दिया गया है, तो जब आप इस REST एपीआई (ऐप 1 द्वारा उजागर) का उपयोग करने का प्रयास करते हैं, तो आप क्लाइंट को अपने एसएसएल / टीएलएस प्रमाणपत्र देने के लिए कहने के लिए ऐप 1 को कॉन्फ़िगर कर सकते हैं।

इससे हमें यह पहचानने में मदद मिलेगी कि ग्राहक वास्तव में ऐप 2 का ग्राहक है।

दो और सेंट:
यदि आपके ऐप 1 रीस्ट एपीआई कॉल के लिए लोड की जरूरत हैसंतुलन, NGINX आपका चुना जाना चाहिए। SSL क्लाइंट प्रमाणपत्र आधारित प्रमाणीकरण को NGINX पर लोड किया जा सकता है और आपका स्प्रिंग बूट ऐप SSL संबंधित कॉन्फ़िगरेशन के बारे में अधिक चिंता नहीं करता है।


जवाब के लिए 0 № 3

हम जिस समाधान के साथ गए थे, वह OAuth2 client_credentials वर्कफ़्लो का उपयोग करके दोनों को सुरक्षित करने के लिए था। वह OAuth2 प्रवाह है जहां ग्राहक स्वयं कॉल करने के लिए टोकन का अनुरोध करते हैं, न कि उपयोगकर्ता के रूप में।

चेक आउट स्प्रिंग क्लाउड सुरक्षा

1) अपनी सेवाओं का उपयोग करके सुरक्षित करें @EnableResourceServer

@SpringBootApplication
@EnableResourceServer
public class Application ...

2) एक का उपयोग कर एक सेवा से दूसरे करने के लिए कॉल करें OAuth2RestTemplate

चेक आउट संसाधन सर्वर टोकन रिले में http://cloud.spring.io/spring-cloud-security/spring-cloud-security.html जो निर्दिष्ट करेगा कि कैसे कॉन्फ़िगर किया जाए Oauth2RestTemplate एक सेवा से दूसरे में सुरक्षा संदर्भ विवरण (टोकन) पर अग्रेषित करना।

3) सेवा A और सेवा B को सक्षम होना चाहिएइन तकनीकों का उपयोग करके संवाद करें यदि वे समान Oauth2 क्लाइंट और सीक्रेट का उपयोग करके कॉन्फ़िगर किए गए हैं। इसे एप्लिकेशन में कॉन्फ़िगर किया जाएगा "application.properties फ़ाइल, उम्मीद है कि इसे पर्यावरण द्वारा इंजेक्ट किया जाएगा। Oauth2 स्कोप्स को भूमिका पहचानकर्ता के रूप में इस्तेमाल किया जा सकता है। आप इसलिए कह सकते हैं कि केवल एक। ग्राहक साथ में कार्यक्षेत्र (एपीआई-रीड, एपी-राइट) की पहुंच होनी चाहिए समापन बिंदु ए में सेवा ए। यह स्प्रिंग सिक्योरिटी ऑथराइजेशन कॉन्फ़िगरेशन के साथ-साथ प्रयोग करने योग्य है @EnableGlobalMethodSecurity