ArcGIS सर्वर को प्रोग्रामेटिक प्रमाणीकरण ने RESTful API के माध्यम से परतें सुरक्षित कीं


16

मेरे पास एक ArcGIS 10.1 सर्वर उदाहरण है जो इंटरनेट पर सुरक्षित मैप्सशिप को उजागर करता है। मेरी ज़रूरत एक क्लाइंट एप्लिकेशन को कोड करने की है (जो मैं वर्तमान में आर्कगिस जावास्क्रिप्ट एपीआई के 3.3 संस्करण का उपयोग करके बना रहा हूं) उपयोगकर्ता को उन सुरक्षित वेबसर्विस को देखने के लिए सक्षम बनाता है:

मुझे लगता है कि यह ऑनलाइन ESRI उदाहरण है एक अच्छी शुरुआत है।

मेरी इच्छा उपयोगकर्ता को EACH मैप सेवा प्रमाणीकरण के लिए संकेत देने की नहीं है, क्योंकि मुझे पहले से ही पता है कि सभी मैप सर्वर उसके / उसके हैं और इसलिए उसी उपयोगकर्ता नाम और पासवर्ड के तहत उसके द्वारा सुलभ हैं। मेरे विचार में, क्रेडेंशियल्स के लिए प्रॉम्प्ट केवल ONCE दिखाई देना चाहिए और इसलिए जेएस कोड को किसी न किसी तरह के RESTful लॉगिन कॉल के माध्यम से मैप्स सर्विस में से प्रत्येक को क्रेडेंशियल्स खिलाना चाहिए। मेरे लिए ऐसा नहीं लगता है कि आर्कगिस सर्वर रीस्ट एपीआई इस तरह की कॉल प्रदान कर रहा है ... शायद मैं गलत हूं।

इसलिए यह आर्कस्टिस सर्वर के साथ व्यवहारिक रूप से सुरक्षित मैप सर्वर में प्रवेश करने का यह "उचित" तरीका है (सुरक्षित रूप से सुरक्षित सेवाओं तक पहुंच बनाना संभव है)? यदि हां, तो क्या आप में से कोई भी इसे समझाने वाले वेब संसाधनों के उदाहरण या लिंक प्रदान कर सकता है?


कृपया हमें ArcGIS GIS सर्वर संस्करण (10.0 या 10.1) पता है ??
सुनील

सुनील, मैं इसे लिखना भूल गया, यह 10.1 है!
csparpa

1
क्या आप आर्कगिस सिक्योरिटी स्टोर का उपयोग कर रहे हैं न कि विंडोज़ के समान?
ब्रैड नेसोम

@Brad Nesom के लिए इस समय मेरा ArcGIS सर्वर उदाहरण एक अंतर्निहित सुरक्षा स्टोर (उपयोगकर्ताओं और भूमिकाओं के साथ) का उपयोग कर रहा है, लेकिन मैं इस उदाहरण को प्रमाणीकरण उद्देश्यों के लिए बाहरी LDAP सर्वर से लिंक करने की योजना बना रहा हूं
csparpa

जवाबों:


11

मुझे अंततः वही मिला, जिसकी मुझे तलाश थी: एक समुचित आर्कगिस सर्वर वेब एंडपॉइंट जो मैं टोकन जेनरेट करने के लिए उपयोग कर सकता था!

कॉल यह है:

GET http://<arcgisserver_host:port>/arcgis/tokens?request=getToken&username=<usr>&password=<usr>&expiration=<token_lifespan>

जो HTTP प्रतिसाद बॉडी में एक टोकन वापस देता है, और कोई इसे फिर से क्रेडेंशियल के लिए संकेत दिए बिना सुरक्षित संसाधनों के लिए आगे अनुरोध के साथ भेज सकता है। टोकन Cookieअनुरोध शीर्षलेख के लिए मूल्य होना चाहिए , क्योंकि यह वर्तमान में क्लाइंट साइड पर कुकी में संग्रहीत है।

लेकिन ... लानत है ! यह टोकन जनरेटर आर्कगिस सर्वर रीस्ट एपीआई का हिस्सा नहीं है !!! मैं इसे ऑनलाइन एपीआई प्रलेखन में नहीं मिला ! दुनिया में मुझे कहाँ मिल सकता है ???

इसका मतलब यह है कि ArcGIS सर्वर में एक RESTful प्रमाणीकरण ढांचा नहीं है।

उदाहरण के लिए, अगर हमारे पास आर्कजीस्ट रीस्ट एपीआई के तहत यह मैपवर्क उजागर हो गया है: /arcgis/rest/services/myDir/myMapService/MapServer/layersऔर हम इस संसाधन को प्राप्त करने की कोशिश करते हैं , तो हमें आर्कजीआईएस सर्वर से जो मिलता है वह एक प्रतिक्रिया है जिसमें 200: OKस्थिति कोड और शरीर में एक HTML दस्तावेज़ (HTML एक लॉगिन फ़ॉर्म है) )। RESTful-to-RESTful लॉगिन से, मैं उम्मीद करूंगा कि अनुरोध ने मुझे 401: Authentication Requiredएक WWW-Authenticateहेडर के साथ एक स्थिति कोड वापस दिया ... मैंने एक REST क्लाइंट प्रोग्राम का उपयोग करके इस पूरी चीज़ का स्वयं परीक्षण किया।


3
अफसोस की बात है कि ज्यादातर "रेस्टफुल" कार्यान्वयन रेस्टफुल नहीं हैं :) कुछ साल पहले मैंने इस बारे में सुपर-सख्त होने का त्याग किया क्योंकि सच्चाई यह है कि अधिकांश कार्यान्वयन "रीस्ट-लाइक" हैं। आपके विशेष उपयोग के मामले में, मैं आमतौर पर एक अलग तरीका अपनाता हूं। मैं पसंद के अंतर्निहित प्रमाणीकरण प्रणाली का उपयोग करता हूं और आर्कजीआईएस अनुरोधों को खोल देता हूं। इसलिए अगर मैं Django ऑटेंटिकेशन, या माणिक के साथ प्रमाणीकरण को संभाल रहा हूं, या .net का या जो भी हो, मैं उस प्रणाली का उपयोग करता हूं। फिर, जब वह सिस्टम कहता है कि यह ठीक है, तो आप अनुरोधों को आंतरिक आर्कजीआईएस सर्वर / पोर्ट पर प्रॉक्सी कर सकते हैं जो बाहरी दुनिया को बंद कर दिया गया है।
रागी यासर बुरहुम

2
हाय @ रागी यासर बुरहुम, आप सही हैं: हम कभी भी पूरी तरह से दुनिया में नहीं रहेंगे;; मैं भी आपकी तरह एक दृष्टिकोण पर विचार करता हूं: मुझे प्रॉक्सी होने का विचार पसंद है (जो आर्काइव सर्वर के अलावा अन्य वेबसर्विस के अनुरोधों को भी संभाल सकता है) के रूप में अच्छी तरह से) लेकिन मैं पूरे आर्किटेक्चर की जटिलता को यथासंभव कम रखने की आवश्यकता में हूं। इसलिए, यह पता चलने के बाद कि उपयोगकर्ताओं को मैप्स सर्विसेज़ पर प्रोग्रामेटिक रूप से प्रमाणित करने का एक सीधा तरीका है, मैं इसे चलूँगा! फिर भी धन्यवाद!
सीएसआरपा

शायद यह बहुत पुराना सवाल है, लेकिन उम्मीद है कि आप देख सकते हैं कि Esri REST API में अब GenerateToken मेथड है: resource.arcgis.com/en/help/arcgis-rest-api/index.html#//……
नाथन वू

7

आर्किस सर्वर सुरक्षा कैसे काम करती है , इस पर एक नज़र डालें

मूल रूप से, आपको उपयोगकर्ताओं और समूहों को बनाने और कुछ सेवाओं पर एक विशेष उपयोगकर्ता अधिकार देने की आवश्यकता होगी।

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

आप एक प्रोग्रामर के रूप में यह टोकन हर मैप सर्विस, क्वेरी सर्विस आदि को भेजेंगे।

यह पृष्ठ टोकन आधारित सेवाओं का उपयोग करने का विवरण देता है

आर्कगिस जावास्क्रिप्ट एपीआई पहले से ही एक क्लास, आइडेंटिटी मैनजर के साथ आता है

यहां पहचान प्रबंधक का उपयोग करने के तरीके के कुछ नमूने दिए गए हैं ।


3

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

देवदत्त द्वारा जुड़ा हुआ नमूना, जबकि वैध है, ऐसा करने का पूर्व-पहचान प्रबंधक तरीका है और इसमें बहुत अधिक कोड शामिल हैं जो अब आवश्यक है कि सुरक्षित सेवाओं के लिए प्रमाणीकरण एपीआई में बेक किया गया हो।


1
मैंने ईएसआरआई के प्रलेखन के लिए सिर्फ नमूना लिंक लिया था। क्या नए नमूनों को इंगित करने के लिए प्रलेखन को अद्यतन किया जा सकता है?
देवदत्त तेंग्शे

2
दोस्तों, आपके संकेत के लिए धन्यवाद, लेकिन मुझे लगता है कि आपको मेरी बात नहीं मिली। परिदृश्य यह है: मेरा उपयोगकर्ता एन सुरक्षित मैप्सशिप का उपयोग करने जा रहा है, जिसका अर्थ है कि वह लॉगिन प्रॉम्प्ट के साथ एन बार परेशान होने वाला है। चूँकि सभी उपयोगकर्ता के मानचित्रकार एक ही क्रेडेंशियल का उपयोग करके एक्सेस किए जा सकते हैं, मैं अपने ऐप को उनके लिए केवल JCE ONCE पूछना चाहूंगा और फिर प्रत्येक मैप सेवा को स्वचालित रूप से प्रमाणित करने के लिए उनका उपयोग करूंगा। इस स्तर पर, मुझे लगता है कि मुझे आर्कजीआईएस सर्वर के साथ कई मैप सर्विस को संभालने के लिए एक प्रॉक्सी पेज का उपयोग करना चाहिए । बढ़िया है? कोई और सीधा विकल्प? अग्रिम धन्यवाद, आशा है कि मैंने अपनी जरूरतों को स्पष्ट कर दिया है ..
csparpa

2

आप प्रॉक्सी का उपयोग भी कर सकते हैं, इसलिए आपका एप्लिकेशन उपयोगकर्ता नाम और पासवर्ड के लिए कभी संकेत नहीं देगा। और आपको सुरक्षित सेवाओं तक पहुंचने के लिए टोकन सेट करने की आवश्यकता नहीं है, जब भी आप उन्हें एक्सेस कर रहे हों। केवल एक चीज जो आपको करने की ज़रूरत है वह आपकी जेएस फ़ाइल में है, निम्नलिखित सेट करें: esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (जैसे,। http: //localhost//DotNet/proxy.ashx ; esriConfig.defaults.io.alwaysUseProxy सच =; और अपने proxy.config फ़ाइल में, सभी सेवाओं जो आप अपने आवेदन में उपभोग कर रहे हैं प्रदान करते हैं।
संदर्भ लें https: //github.com/Esri/resource-proxy/ प्रॉक्सी के बारे में अधिक जानकारी के लिए। आप टोकन-आधारित प्रमाणीकरण चाहते हैं के रूप में, अपने proxy.config फ़ाइल में, आप यूआरएल, उपयोगकर्ता नाम, केवल पासवर्ड और matchAll सामग्री जोड़ने की जरूरत है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.