Işte biz SAML tarafından doğrulandığı Single Sign On kullanarak başka bir şirketin web uygulaması ile arayüz gerekir bir web uygulaması var. Bizim web uygulamaları PHP ile yazılmış, ve diğer şirket kullanarak hangi dil seçimi açıkça alakasız edilir. Yine de, ben bu diğer şirket SAML istekleri ile SOAP istekleri göndermek basit bir API yazmak, ve bir SAML yanıtı geri oluşturmak için gerekli ettik. 1) gerçekten ben bir, 2) bu sınırlar istedim bile PHP ile yazılmış SAML etkileşimler için birçok seçenek var gibi görünüyor değil mi: Ben üç nedenden dolayı sıfırdan yazıyorum başka bir üçüncü taraf bileşen ekleyerek, ve 3) sıfırdan bir şeyler oluşturma ile ilgili olacaktır havai genellikle önemli ölçüde daha iyi bir anlayış ile beni bırakır ve bana çok daha yetenekli gerekirse gelecekte şeyi uyum yapar.
Her neyse, ben SAML, SOAP, ve genel olarak XML standartları için oldukça yeni, bu yüzden ben gitmek gibi bir tür kendimi öğretim oldum. Ben diğer şirket bizim tepki dijital bir sertifika (ve aldığımız istek benzer dijital olarak imzalanmış olacaktır) ile imzalanmış olması gerekmektedir belirtildi olduğu bir istisna dışında, hemen hemen tam bizim amaçlı API var. Yani XML imza oluşturmak / işlemek için nasıl anlamaya çalışıyorum, ama W3C özellikleri tam olarak ışık okuma değil gibi dürüstçe tüm biraz kafa karıştırıcı.
Assertions and Protocol for the OASIS Security Markup Language (SAML) V1.1 belge (diğer şirket onlar v1.1 kullanarak olacak dedi belge Ben kapalı devam ettik) Bölüm 5.4.8, imzalı bir iddiayı içeren imzalı bir yanıt bir örnek içermektedir Hangi ben referans için buraya eklemek için gidiyorum:
<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">scott@example.org</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>
Peki nasıl böyle bir şey oluşturabilir mi? Ben böyle bir şey alırsanız, nasıl bunu doğrulamak mı? Ayrıca, herkes <ds:Signature>
etiketleri burada ne sadece bir temel kavramsal bir bakış sunabilir? İki <ds:Signature>
etiketler, ana <Response>
biri ve <Assertion>
biri, kendi <ds:DigestValue>
ihtiva eden, her biri {var gibi görünüyor [(5)]} ve <ds:X509Certificate>
(ve her biri ayrı). Nasıl bu üretilir? Bu kulübe herhangi bir ışık çok takdir edilecektir. Öğreticiler veya kod örnekleri daha fazla duyacağız! Sadece bana doğru yolda alabilirsiniz Ama eğer bu noktada, ben gerçekten soruyorum hepsi. Şu anda tüm hala benim için büyük bir kara kutu gibi görünüyor.
Bu yardımcı olur arada, bu SAML uygulamaları "Exclusive Kurallı" yöntemi yalnızca (tar-C14N) kullanmalı ve sadece "dönüştürmek zarflı" kullanması gerektiğini başka saml 1.1 spec diyor. Ben hala ne anlama geldiğini tam olarak emin değilim.