SAML सेवा प्रदाता कैसे बनें


80

मेरी कंपनी वर्तमान में एक जावा वेब एप्लिकेशन विकसित करती है। हमारे ग्राहकों के एक जोड़े में आंतरिक एसएएमएल सर्वर (पहचान प्रदाता) हैं और अनुरोध किया है कि हम उनके साथ एकीकृत करें। इसलिए हाल ही में मैं इस पर पढ़ रहा हूं और ओपनैम के साथ खेल रहा हूं। लगभग 3 दिनों के बाद, मुझे इसकी सामान्य समझ है, लेकिन मेरी जानकारी में अभी भी कुछ अंतराल हैं। मेरी आशा है कि कोई मेरे लिए यह स्पष्ट कर सकता है।

तो यहां बताया गया है कि मैं किस प्रकार लॉग इन करने वाले उपयोगकर्ता के वर्कफ़्लो की कल्पना करता हूं।

आइए हमारे ग्राहकों SAML सर्वर को https://their.samlserver.com के रूप में परिभाषित करते हैं । इसलिए एक उपयोगकर्ता हमारे वेब एप्लिकेशन पर एक संसाधन के लिए आता है जो सुरक्षित है। मान लीजिए कि URL http://my.app.com/something है

इसलिए यदि मैं सही हूं, तो my.app.com वही है जो एसएएमएल सेवा प्रदाता के रूप में परिभाषित करता है । हमारे एप्लिकेशन को पता चलता है कि इस उपयोगकर्ता को लॉग इन करने की आवश्यकता है। हम फिर उपयोगकर्ता के लिए इस तरह एक पृष्ठ प्रस्तुत करते हैं ...

<script>JQuery Script to auto submit this form on ready</script>
<form method="post" action="https://their.samlserver.com/Post/Servlet">
    <input type="hidden" name="SAMLRequest" value="someBase64Data" />
    <input type="submit" value="Submit" />
</form>

और यह इस का एन्कोडेड संस्करण someBase64Dataहोना चाहिए base64...

<samlp:AuthnRequest
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
  ID="identifier_1"
  Version="2.0"
  IssueInstant="2004-12-05T09:21:59Z"
  AssertionConsumerServiceIndex="0">
 <saml:Issuer>http://my.app.com</saml:Issuer>
 <samlp:NameIDPolicy
   AllowCreate="true"
   Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>

तो मेरा पहला युगल प्रश्न।

आईडी मान क्या है ?

और मैं खुद को जारीकर्ता क्यों घोषित कर सकता हूं ?

क्या आइडेंटिटी प्रोवाइडर को मेरे बारे में पता है? हो सकता है कि यह OpenAM पर मुझे दिखाई दे रहा विश्वास का सर्कल है । और अगर यह मेरे बारे में जानता है, तो यह मेरे बारे में कैसे जानता है और इसे जानने की क्या जरूरत है?

इसलिए उपयोगकर्ता द्वारा उस पृष्ठ को अग्रेषित करने के बाद, उन्हें IDP https://their.samlserver.com द्वारा प्रदान किए गए पृष्ठ पर ले जाया जाता है । वे उस पेज को प्रमाणित करते हैं और आईडीपी प्रमाणीकरण को मान्य करने और उपयोगकर्ता को देखने के लिए जादू करता है। प्रमाणीकरण सफल होने के बाद, IDP यहाँ<samlp:Response> परिभाषित वापस भेजता है

कुछ और सवाल।

सबसे पहले, <samlp:Response>मैं अपने वेब एप्लिकेशन पर वापस कैसे आता हूं ताकि मैं इसकी जांच कर सकूं।

और उस प्रतिक्रिया को मान्य करने के लिए मुझे क्या देखना चाहिए जो सफल रहा? विफलता कैसी दिखती है?

हम वर्तमान में उपयोगकर्ताओं की पहचान करने के लिए ईमेल पते (LDAP) का उपयोग करते हैं, इसलिए हम संभवतः उस प्रतिक्रिया से हड़प लेंगे और उसी तरह से उपयोग करेंगे जो अब हम करते हैं। उस प्रतिक्रिया में मुझे और कुछ भी ध्यान में रखना चाहिए?

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

और अंत में, कुछ ऐसे विषय हैं जो मेरे पढ़ने में इधर-उधर फेंक दिए गए हैं और मुझे यकीन नहीं है कि वे इस वर्कफ़्लो में कैसे फिट होंगे। वे सर्किल ऑफ़ ट्रस्ट , टोकन और कलाकृतियाँ हैं

सभी की मदद के लिए धन्यवाद। मुझे पिछले कुछ दिनों में बहुत सारी जानकारी मिली है, और यह संभव है कि मैं थोड़ा और खेलने के बाद उन्हें एक साथ जोड़ सकता हूं। लेकिन मुझे अभी तक एक सीधा "यहां का पोस्ट" वर्कफ़्लो लेख अभी तक नहीं मिला है। शायद ऐसा इसलिए है क्योंकि मैं गलत हूं कि यह कैसे काम करता है। शायद यह इसलिए है क्योंकि यह उतना लोकप्रिय नहीं है। लेकिन मैं वास्तव में यह सुनिश्चित करना चाहता था कि मुझे वर्कफ़्लो मिला, इसलिए मैंने उपयोगकर्ता प्रमाणीकरण के रूप में महत्वपूर्ण रूप से महत्वपूर्ण कदम नहीं उठाया।


3
मैं अभी उसी समस्या से गुजर रहा हूं (पिंग आइडेंटिटी के साथ बातचीत करते हुए एक हल्के फेडरेटेड एसएएमएल वी 2 सर्विस प्रोवाइडर बनाने का तरीका देखें)। क्या आप टिप्पणी करते हैं कि यह आपके लिए कैसे काम करता है? क्या आपने एक फ़ेडलेट का उपयोग करके या अपना कोड लिखा था? धन्यवाद!
theglauber

1
मैं कुछ इसी तरह का माहौल बना रहा हूं। मेरे पास एक जावा आधारित वेब एप्लीकेशन है जो कि टॉमकैट पर चल रही है, अब मुझे एसएएमएल का उपयोग करके एसएसओ करना है। मुझे सैद्धांतिक ज्ञान के अलावा इन तकनीकों के बारे में कोई जानकारी नहीं है। किसी को खरोंच से कॉन्फ़िगर करने में मेरी मदद कर सकते हैं?
जेरी

जवाबों:


46

आपके विशिष्ट प्रश्नों के जवाब में:

1.) "आईडी" मान क्या माना जाता है?

  • यह एसएएमएल अनुरोध के लिए एक विशिष्ट पहचानकर्ता होना चाहिए। एसएएमएल 2.0 विनिर्देश बताता है कि यह वास्तव में कार्यान्वयन विशिष्ट है कि यह कैसे किया जाता है, लेकिन निम्नलिखित सिफारिशें करता है:

वह तंत्र जिसके द्वारा एक एसएएमएल प्रणाली इकाई यह सुनिश्चित करती है कि पहचानकर्ता अद्वितीय है कार्यान्वयन के लिए छोड़ दिया गया है। इस मामले में कि एक यादृच्छिक या छद्म आयामी तकनीक कार्यरत है, दो बेतरतीब ढंग से चुने गए पहचानकर्ता होने की संभावना समान होनी चाहिए जो 2 ^ -128 से कम या बराबर होनी चाहिए और लंबाई में 2 ^ -160 से कम या बराबर होनी चाहिए। इस आवश्यकता को लंबाई में 128 और 160 बिट्स के बीच एक यादृच्छिक रूप से चुने गए मूल्य को एन्कोडिंग द्वारा पूरा किया जा सकता है।

2.) IdP आपके बारे में कैसे जानता है?

  • आपके SP को IdP के साथ पंजीकृत होना चाहिए। इसे पूरा करने के लिए, एसएएमएल विनिर्देश "एसएएमएल मेटाडेटा" के लिए एक प्रारूप को परिभाषित करता है, जो आईडीपी को बताता है कि आपके एसएएमएल रिसीवर कहां हैं, आपके प्रमाण पत्र क्या हैं, आपके द्वारा एक्सचेंज किए गए गुण, आदि। ओपनैम संभवतः एक विश्वसनीय एसपी को कॉन्फ़िगर करने के लिए कुछ न्यूनतम आवश्यकताओं को निर्धारित करता है। यह प्रत्येक उत्पाद में भिन्न होता है।

3.) रिस्पांस कहां जाता है, और क्या जांचना है?

  • प्रतिक्रिया आपके एसोर्शन कंज्यूमर सर्विस (एसीएस) URL पर जाएगी, जो आमतौर पर एसएएमएल मेटाडेटा में परिभाषित होता है जिसे आप अपने एसपी से आरंभिक सेटअप के लिए आईडीपी के साथ एक्सचेंज करते हैं। जब आप एक SAML प्रतिक्रिया प्राप्त करते हैं, तो आपको कई चीजों की जांच करने की आवश्यकता होती है - लेकिन सबसे महत्वपूर्ण बात यह है कि SAML स्थिति कोड "सफलता" होना चाहिए, TheResponseTo ID को अनुरोध के भेजे गए मेल से मेल खाना चाहिए और आपको अभिकथन पर डिजिटल हस्ताक्षर को मान्य करना चाहिए। उसके लिए, आपको आईडीपी के सार्वजनिक सत्यापन प्रमाणपत्र पर भरोसा करना होगा, और आप शायद निरस्तीकरण जाँच भी करना चाहेंगे।

4.) लॉगआउट के बारे में क्या?

  • SAML 2.0 सिंगल लॉगऑउट (SLO) के लिए एक प्रोफाइल भी परिभाषित करता है। यह न केवल आपको एसपी से बाहर करेगा, बल्कि ईपीपी और संभावित रूप से किसी अन्य एसपी के साथ आपने एक सत्र स्थापित किया होगा। इसमें सिंगल साइन-ऑन (SSO) के रूप में एक समान अनुरोध / प्रतिक्रिया प्रवाह है, और इस तरह सेट अप और चेक (स्थिति कोड, हस्ताक्षर आदि) के लिए समान चीजें हैं।

तो संक्षेप में - यह खरोंच से लागू करने के लिए काफी जटिल हो सकता है। आज़माए गए और सच्चे पुस्तकालयों और / या उत्पादों का उपयोग करना सबसे अच्छा है, जैसे कि इयान सुझाव देते हैं। उनकी तरह की कंपनियों ने अन्य विक्रेताओं के साथ कल्पना और परीक्षण अंतर के अनुसार लागू करने के लिए डेवलपर के सैकड़ों घंटे का समय लगाया है।


2
Saml request में एक ID क्यों होनी चाहिए। मुझे वह नहीं मिला।
अश्विन

1
यह SAML 2.0 कोर कल्पना के भाग के रूप में आवश्यक है। Docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf देखें । AuthnRequest, AuthnRequestType (अनुभाग 3.4.1) प्रकार का है जो RequestAbstractType (अनुभाग 3.2.1) का एक विस्तार है, जिसमें एक अनिवार्य ID विशेषता है। अनुरोध में आईडी के लिए प्रमुख लाभों में से एक रिस्पांस है, फिर इसे संदर्भित कर सकते हैं ताकि एसपी रीप्ले को रोकने के लिए दोनों को एक साथ मैप कर सके।
स्कॉट टी।

आप कहते हैं कि रिप्ले हमले को रोकने के लिए आईडी दी गई है। अगर मैं एक ssl / https कनेक्शन का उपयोग कर रहा हूं, तो सेवा प्रदाता और IDProvider को धोखा दे सकता है, फिर से हमले को रोका जा सकता है।
अश्विन

1
SP और IdP के बीच SSL / HTTPS, रिप्ले हमले को रोकने के लिए कुछ अर्थहीन है, क्योंकि "फ्रंट चैनल" (ब्राउज़र) बाइंडिंग का आमतौर पर उपयोग किया जाता है।
स्कॉट टी।

@Ashwin - आईडी वहाँ है ताकि जब आपको प्रतिक्रिया वापस मिले तो उसमें वही आईडी हो और आप जान सकें कि आपको जो प्रतिक्रिया मिल रही है, वह आपके अनुरोध के संबंध में थी, जहाँ तक रिप्ले को रोकने की, मेरी समझ यह है कि एसएएमएल और आईडी दोनों के अनुरोधों और रिपॉन्स में बहुत से टाइमस्टैम्प केवल समय की सीमित अवधि के लिए प्राधिकरण के साथ व्यवहार्य हैं।
चाचा Iroh

3

यदि आप सर्विस प्रोवाइडर के रूप में एक सिंगल जावा एप्लिकेशन सेट करने का प्रयास कर रहे हैं, तो आपको ओरेकल (स्टैंडअलोन के रूप में) या फोर्जरॉक (ओपनैम के साथ बंडल ) से फेडलेट का उपयोग करने पर विचार करना चाहिए । ForgeRock Fedlet में कुछ पहचानकर्ता प्रदाता के रूप में Shibboleth 2.2.1 के साथ बातचीत के कुछ मुद्दे हैं, लेकिन मुझे यह कॉन्फ़िगर करने और अधिक जानकारीपूर्ण होने के लिए कुछ सरल लगता है।

प्रत्येक के पास स्पष्ट निर्देश हैं जो आपको तैनात करने में मदद करने के लिए README में निहित हैं। एक बार जब Fedlet कॉन्फ़िगर किया गया और IDP के साथ संचार कर रहा है, तो सफलता पृष्ठ आपको वह सभी कोड दिखाता है, जो आपको अपने आवेदन में फेडरेटेड SSO को एकीकृत करने की आवश्यकता है। यह AuthnRequests और Responses भेजने और प्राप्त करने की पृष्ठभूमि का काम करता है।

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

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