tino
November 6, 2017, 7:37am
1
Ahojte, snažím sa rozbehať sso na jave (kniznica opensaml2) a mám problém s vyskladaním správneho počiatočného authNRequestu. Metadáta s public key mám registrované u idp, a používam najnovšie metadáta idp z októbra.
request posielam ako post na https://auth.vyvoj.upvs.globaltel.sk/oamfed/idp/samlv20 , content-type x-www-form-urlencoded, a cely obsah je v base 64 + inflate + url encoded. Ako som sa dozvedel, na dev by mal fungovat iba http-post binding, a RequestedAuthnContext Comparison musi byt nastaveny na “exact”. Neviem co by mohlo byt zle este ale predpokladam ze nieco v xml ktore odosielam. Vdaka dopredu za pomoc
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">http://test.eranet.biz/upvs</saml2:Issuer>
<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="#_e1599d99960e7ac3b69e09e533c22da26e3ad499f6bb8e5cff757471497f310e">
<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#"/></ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>uQ8VE1QK0E2OBP00SwTiopcP4HE=</ds:DigestValue></ds:Reference></ds:SignedInfo>
<ds:SignatureValue>Nu1+y+C...//skratene pre prehladnost//...</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIID...//skratene pre prehladnost//...
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<saml2p:RequestedAuthnContext Comparison="exact">
<saml:AuthnContextClassRef
<xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
</saml:AuthnContextClassRef></saml2p:RequestedAuthnContext>
</saml2p:AuthnRequest>
miso
November 6, 2017, 8:57am
2
Prikladam korektne skonstruovany request, placeholdre vsak treba nahradit - ${assertion_consumer_URL} s URL endpointu assertion consumer-a a ${metadata_entityID} s identifikatorom service provider-a vramci metadat.
Pre doplnenie, request treba poslat ako GET request a nie POST, vid.
http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.1.2.SP-Initiated%20SSO%3A%20%20Redirect%2FPOST%20Bindings|outline
<saml2p:AuthnRequest AssertionConsumerServiceURL="${assertion_consumer_URL}"
Destination="https://auth.vyvoj.upvs.globaltel.sk/oamfed/idp/samlv20"
ForceAuthn="false"
ID="_19f8d5f6-7f40-4d6c-93e6-bbc56366ce32"
IsPassive="false"
IssueInstant="2017-11-06T08:41:42.096Z"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Version="2.0"
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
>
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">${metadata_entityID}</saml2:Issuer>
<saml2p:NameIDPolicy AllowCreate="true"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
SPNameQualifier="${metadata_entityID}"
/>
<saml2p:RequestedAuthnContext Comparison="exact">
<saml2:AuthnContextClassRef xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
</saml2:AuthnContextClassRef>
<saml2:AuthnContextClassRef xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI
</saml2:AuthnContextClassRef>
</saml2p:RequestedAuthnContext>
</saml2p:AuthnRequest>
`
3 Likes
tino
November 6, 2017, 11:31am
3
Vďaka, vyhodil som signature, certifikát a pridal NameIDPolicy, takže už to mám v rovnakom formáte ale stále dostávam “System error”.
Pôvodne som používal signature podľa https://www.samltool.com/generic_sso_req.php . (AuthNRequest with embedded signature (HTTP-POST binding))
Nie je potrebné tento request podpísať pred odoslaním?
miso
November 6, 2017, 11:49am
4
Ono to samozrejme podpisane je, ale podpis je sucastou GET query parametrov.
Zrejme ten HTTP request ako taky nekonstruujes dobre. Priloz sem log z HTTP requestu a bude to jasnejsie.
tino
November 7, 2017, 7:37am
5
ano problém bol ten že som ich neposielal ako query parametre. Doplnil som to, takže teraz vyzerajú pred URL encodovanim takto:
SAMLRequest=xZRPj9MwEMW/SuR7869pk7XaSqUVom…4j/DYX6M11o1ajcaSf/l8+0dZ/QI=
SigAlg=http://www.w3.org/2000/09/xmldsig#rsa-sha1
Signature=Zok42CoMUTHDdvVvioAdzGpTXCh0ZP…zS090wimRTRGcGy8CAgBp6j1nhQ==
Ale stále to nefunguje, a asi to vyriešim už iba s globaltelom kedže samotný request by mal byť už správny
miso
November 7, 2017, 5:56pm
6
Tu najdes “referencnu” implementaciu, mozes vyskusat sam. Je to zalozene na CXF, ale interne to pouziva OpenSAML, avsak vo verzii 3.x.
3 Likes