2011-03-31 6 views
70

मॉर्निंग हर कोई,एक SAML सेवा प्रदाता कैसे बनें

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

तो यहाँ कैसे मैं में एक उपयोगकर्ता लॉगिंग की कार्यप्रवाह की कल्पना है।

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

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

<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। और अगर यह मेरे बारे में पता है, तो यह मेरे बारे में कैसे पता चलता है और उसे क्या जानने की आवश्यकता है?

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

कुछ और प्रश्न।

सबसे पहले, <samlp:Response> मेरे वेब एप्लिकेशन पर वापस कैसे जाता है ताकि मैं इसे देख सकूं?

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

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

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

और आखिरकार, मेरे पढ़ने में चार विषयों को फेंक दिया गया है और मुझे यकीन नहीं है कि वे इस वर्कफ़्लो में कैसे फिट बैठते हैं। वे ट्रस्ट, टोकन, और कलाकृतियों के मंडल हैं।

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

+2

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

+0

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

उत्तर

42

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

1.) "आईडी" मूल्य होना चाहिए क्या है?

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

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

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

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

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

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

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

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

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

+2

सैम अनुरोध में आईडी क्यों होनी चाहिए। मुझे वह नहीं मिला। – Ashwin

+1

यह SAML 2.0 कोर स्पेक के हिस्से के रूप में आवश्यक है। Http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf देखें। AuthnRequest प्रकार AuthnRequestType (सेक्शन 3.4.1) है जो RequestAbstractType (सेक्शन 3.2.1) का विस्तार है जिसमें एक अनिवार्य आईडी विशेषता है। अनुरोध में आईडी के लिए प्रमुख लाभों में से एक है इसलिए प्रतिक्रिया तब संदर्भित कर सकती है ताकि एसपी दोबारा रीप्ले को रोकने के लिए मानचित्र कर सके। –

+0

आप कहते हैं कि रीप्ले हमले को रोकने के लिए आईडी दी गई है। यदि मैं सेवा प्रदाता और आईडीप्रोवाइडर को एसएसएल/https कनेक्शन का उपयोग कर रहा हूं, तो हमले को फिर से चलाया जा सकता है। – Ashwin

2

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

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

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