काम पर हमारे पास एक वेब ऐप है जिसे हमें एसएएमएल द्वारा मान्य सिंगल साइन ऑन का उपयोग करके किसी अन्य कंपनी के वेब ऐप के साथ इंटरफेस करने की आवश्यकता होगी। हमारे वेब ऐप्स PHP में लिखे गए हैं, और यह स्पष्ट रूप से अप्रासंगिक है कि दूसरी कंपनी किस भाषा पसंद का उपयोग कर रही है। फिर भी, मुझे एक साधारण एपीआई लिखने की आवश्यकता है कि यह अन्य कंपनी एसएएमएल अनुरोधों के साथ एसओएपी अनुरोध भेज सकती है, और एक एसएएमएल प्रतिक्रिया उत्पन्न कर सकती है। मैं इसे तीन कारणों से स्क्रैच से लिख रहा हूं: 1) वास्तव में PHP में लिखे गए SAML इंटरैक्शन के लिए कई विकल्प नहीं दिखते हैं, भले ही मैं एक चाहता हूं, 2) यह उस ओवरहेड को सीमित करता है जो शामिल होगा एक और तीसरे पक्ष के घटक जोड़ने के साथ, और 3) स्क्रैच से चीजें बनाने से आम तौर पर मुझे काफी बेहतर समझ मिलती है और यदि आवश्यक हो तो मुझे भविष्य में चीज़ को अनुकूलित करने में अधिक सक्षम बनाता है।SAML काम करने के लिए मुझे XML हस्ताक्षर के बारे में क्या जानने की आवश्यकता है?
वैसे भी, मैं सामान्य रूप से एसएएमएल, एसओएपी, और एक्सएमएल मानकों के लिए बिल्कुल नया हूं, इसलिए मैं खुद को पढ़ाने के लिए खुद को पढ़ रहा हूं। मुझे एपीआई हमारे उद्देश्यों के लिए बहुत अधिक पूर्ण मिला है, एक अपवाद के साथ कि दूसरी कंपनी ने यह निर्दिष्ट किया है कि हमारी प्रतिक्रिया को प्रमाण पत्र के साथ डिजिटल हस्ताक्षर करने की आवश्यकता होगी (और हमें प्राप्त अनुरोध को डिजिटल रूप से हस्ताक्षरित किया जाएगा)। तो मैं एक्सएमएल हस्ताक्षर को संसाधित/उत्पन्न करने का तरीका जानने का प्रयास कर रहा हूं, लेकिन ईमानदारी से यह थोड़ा उलझन में है क्योंकि डब्ल्यू 3 सी चश्मा बिल्कुल हल्के पढ़ने नहीं हैं।
Assertions and Protocol for the OASIS Security Markup Language (SAML) V1.1 दस्तावेज़ (जिस दस्तावेज़ को मैं बंद कर रहा हूं, जैसा कि अन्य कंपनी ने कहा है कि वे v1.1 का उपयोग करेंगे) के हस्ताक्षर 5.4.8 में हस्ताक्षर किए गए हस्ताक्षर वाले एक हस्ताक्षरित प्रतिक्रिया का एक उदाहरण शामिल है, जो मैं मैं संदर्भ में शामिल करने जा रहा हूं:
<Response IssueInstant="2003-04-17T00:46:02Z" MajorVersion="1" MinorVersion="1"
Recipient="www.opensaml.org" ResponseID="_c7055387-af61-4fce-8b98-e2927324b306"
xmlns="urn:oasis:names:tc:SAML:1.0:protocol"
xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_c7055387-af61-4fce-8b98-e2927324b306">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<InclusiveNamespaces PrefixList="#default saml samlp ds xsd xsi"
xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>TCDVSuG6grhyHbzhQFWFzGrxIPE=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>x/GyPbzmFEe85pGD3c1aXG4Vspb9V9jGCjwcRCKrtwPS6vdVNCcY5rHaFPYWkf+5EIYcPzx+pX1h43SmwviCqXRjRtMANWbHLhWAptaK1ywS7gFgsD01qjyen3CP+m3Dw6vKhaq1ed10BYyrIzb4KkHO4ahNyBVXbJwqv5pUaE4=</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIICyjCCAjOgAwIBAgICAnUwDQYJKoZIhvcNAQEEBQAwgakxCzAJBgNVBAYTA1VT ... 8I3bsbmRAUg4UP9hH6ABVq4KQKMknxu1xQxLhpR1y1GPdiowMNTrEG8cCx3w/w==</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<Status><StatusCode Value="samlp:Success"/></Status>
<Assertion AssertionID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc"
IssueInstant="2003-04-17T00:46:02Z" Issuer="www.opensaml.org"
MajorVersion="1" MinorVersion="1" xmlns="urn:oasis:names:tc:SAML:1.0:assertion"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Conditions NotBefore="2003-04-17T00:46:02Z" NotOnOrAfter="2003-04-17T00:51:02Z">
<AudienceRestrictionCondition>
<Audience>http://www.opensaml.org</Audience>
</AudienceRestrictionCondition>
</Conditions>
<AuthenticationStatement AuthenticationInstant="2003-04-17T00:46:00Z"
AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password">
<Subject>
<NameIdentifier Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">[email protected]</NameIdentifier>
<SubjectConfirmation>
<ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</ConfirmationMethod>
</SubjectConfirmation>
</Subject>
<SubjectLocality IPAddress="127.0.0.1"/>
</AuthenticationStatement>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_a75adf55-01d7-40cc-929f-dbd8372ebdfc">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<InclusiveNamespaces PrefixList="#default saml samlp ds xsd xsi"
xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>Kclet6XcaOgOWXM4gty6/UNdviI=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>hq4zk+ZknjggCQgZm7ea8fI79gJEsRy3E8LHDpYXWQIgZpkJN9CMLG8ENR4Nrw+n7iyzixBvKXX8P53BTCT4VghPBWhFTSt9tHWu/AtJfOTh6qaAsNdeCyG86jmtp3TDMWuL/cBUj2OtBZOQMFn7jQ9YB7k1Iz3RqVL+wNmeWI4=</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIICyjCCAjOgAwIBAgICAnUwDQYJKoZIhvcNAQEEBQAwgakxCzAJBgNVBAYTA1VT ... 8I3bsbmRAUg4UP9hH6ABVq4KQKMknxu1xQxLhpR1y1GPdiowMNTrEG8cCx3w/w==</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
</Assertion>
</Response>
तो मैं ऐसा कुछ कैसे उत्पन्न करूं? और अगर मुझे ऐसा कुछ मिलता है, तो मैं इसे कैसे सत्यापित करूं? साथ ही, क्या कोई भी <ds:Signature>
टैग्स के बारे में केवल एक बुनियादी अवधारणात्मक अवलोकन प्रदान कर सकता है? अपने स्वयं के <ds:DigestValue>
, <ds:SignatureValue>
, और <ds:X509Certificate>
(और प्रत्येक विशिष्ट) ऐसा लगता है वहाँ दो <ds:Signature>
टैग, मुख्य <Response>
में एक और एक <Assertion>
में हैं, प्रत्येक युक्त। ये कैसे उत्पन्न होते हैं? इस पर प्रकाश डालने वाली कोई भी प्रकाश बहुत सराहना की जाएगी। ट्यूटोरियल या कोड उदाहरणों की और भी सराहना की जाएगी! लेकिन इस बिंदु पर, अगर आप मुझे सही रास्ते पर ले जा सकते हैं, तो मैं वास्तव में यही पूछ रहा हूं। अभी यह सब अभी भी मेरे लिए एक बड़ा काला बॉक्स जैसा लगता है।
वैसे, अगर यह मदद करता है, तो यह SAML 1.1 spec में कहीं और कहता है कि SAML कार्यान्वयन को केवल "एक्सक्लूसिव कैनोलिकलाइजेशन" विधि (एक्सेल-सी 14 एन) का उपयोग करना चाहिए और केवल "लिफाफा ट्रांसफॉर्म" का उपयोग करना चाहिए। मुझे अभी भी पूरी तरह से यकीन नहीं है कि इसका क्या अर्थ है।
जब आपने सीए निर्दिष्ट किया है हस्ताक्षरित जानकारी तत्व के canonicalization विधि तत्व में nonicalization एल्गोरिदम, आप इसे फिर से बदलने तत्व में क्यों निर्दिष्ट करना चाहिए? – Ashwin
@Ashwin: 'SignedInfo' में' CanonicalizationMethod' 'साइनडइन्फो' तत्व पर लागू होता है, ट्रांसफॉर्म में किसी भी कैनोलिकलाइजेशन को संदर्भित सामग्री पर लागू किया जाता है, इसलिए वे अलग-अलग चीजों पर लागू होते हैं, और यही कारण है कि आपको दोनों की आवश्यकता है। साथ ही, हस्ताक्षरित सामग्री को एक्सएमएल होने की आवश्यकता नहीं है, इसलिए कैनोनिकललाइजेशन लागू नहीं है। – JaakkoK
इसके लिए धन्यवाद :) एक और क्षेत्र है जहां मैं फंस गया हूं। मुझे ट्रांसफॉर्म तत्व में xslt का उपयोग करने की आवश्यकता है। जावा में इसका उपयोग करने का कोई उदाहरण नहीं है। यदि संभव हो तो आप एक नमूना कोड दे सकते हैं या जावा के साथ एक्सएमएल हस्ताक्षर में xslt का उपयोग करने वाले लिंक पर इंगित कर सकते हैं। – Ashwin