Technische informatie
Veiligheid - WS-Security SAML Token Profile / Holder-of-Key
Alle services op het SOA-platform (met uitzondering van SecurityTokenService) moeten opgeroepen worden met een SAML-token van een centrale authenticatiedienst: SecurityTokenService (STS). Dit gebeurt volgens de OASIS WS-Trust-standaard.
Het authenticatieproces verloopt als volgt:
- De service consumer authenticeert zich één keer bij de STS met een X.509-certificaat.
- Hij ontvangt van de STS een ondertekend SAML-token dat 1 uur geldig is.
- Met dit token kan de consumer een uur lang verschillende webservices oproepen.
Door middel van claims maakt de service consumer kenbaar voor welke onderneming of hoedanigheid hij wenst op te treden. De claim komt overeen met het verzendernummer verkregen bij creatie van het webservice kanaal.
Ter informatie: Dit STS-mechanisme moet u eenmalig implementeren alvorens een business service te kunnen oproepen.
Stap voor stap
Stap 1
De service consumer stuurt een RequestSecurityToken (RST) naar STS met de vraag om een SAML 1.1-token te verkrijgen. Het verzendernummer wordt als claim gespecificeerd om aan te geven voor welke onderneming en hoedanigheid de service consumer een token wenst aan te vragen. De service consumer tekent de SOAP request volgens de X.509 _SHA256 security policy. Het gebruikte certificaat moet overeenkomen met het certificaat dat voordien opgeladen is in het Toegangsbeheer.
Voorbeeld RST
<wst:RequestSecurityToken xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:auth="https://schemas.xmlsoap.org/ws/2006/12/authorization"> <wst:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1</wst:TokenType> <wst:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</wst:RequestType> <wst:Claims Dialect="https://schemas.xmlsoap.org/ws/2006/12/authorization/authclaims"> <auth:ClaimType Uri="urn:be:smals:expeditor:number"> <auth:Value>987654</auth:Value> </auth:ClaimType> </wst:Claims> </wst:RequestSecurityToken>
Stap 2
Na authenticatie zal de STS antwoorden met een RequestSecurityTokenResponse (RSTR) die het gevraagde SAML-token bevat. De SAML assertion kan met xpath gefilterd worden (//soapenv:Body/wst:RequestSecurityTokenResponse/wst:RequestedSecurityToken/*).
Voorbeeld RSTR
<wst:RequestSecurityTokenResponse xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:auth="https://schemas.xmlsoap.org/ws/2006/12/authorization"> <wst:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1 </wst:TokenType> <wst:RequestedSecurityToken> <saml:Assertion xmlns="" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" AssertionID="ID_00827a34-1eec-4bf4-a7bf-1c45b1bc2d61" IssueInstant="2011-07-07T10:02:04.685Z" Issuer="https://services.socialsecurity.be/sts" MajorVersion="1" MinorVersion="1" wsu:Id="ID_00827a34-1eec-4bf4-a7bf-1c45b1bc2d61"> <saml:Conditions NotBefore="2011-07-07T10:02:04.538Z" NotOnOrAfter="2011-07-07T11:02:04.538Z"/> <saml:AuthenticationStatement AuthenticationInstant="2011-07-07T10:02:04.685Z" AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:X509-PKI"> ... </saml:AuthenticationStatement> <saml:AttributeStatement> ... </saml:AttributeStatement> <dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">... </dsig:Signature> </saml:Assertion> </wst:RequestedSecurityToken> <wst:Lifetime> <wsu:Created>2011-07-07T10:02:04.538Z</wsu:Created> <wsu:Expires>2011-07-07T11:02:04.538Z</wsu:Expires> </wst:Lifetime> </wst:RequestSecurityTokenResponse>
Het SAML-token bevat alle attributen die de service consumer identificeren (ondernemingsnummer, hoedanigheid, verzendernummer).
Deze attributen worden geëvalueerd tijdens de toegangscontrole van de business service (zie stap 3). De xml-structuur is digitaal ondertekend door STS om authenticiteit te garanderen. Het wst:Lifetime-blok geeft aan in welke periode het SAML-token door de service consumer opnieuw kan worden gebruikt.
Stap 3
Met een SAML-token verkregen van STS kan de consumer gedurende één uur verschillende business webservices oproepen.
De wsse:Security header bevat volgende onderdelen:
- saml:Assertion is het door STS ondertekende SAML-token. De xml-data mogen niet worden gewijzigd (geen formattering, geen namespace-wijzigingen), anders wordt de digitale handtekening gebroken.
- wsu:Timestamp met maximale geldigheid van 5 minuten.
- ds:Signature met digitale handtekening over TMS en soapenv:Body. Elk blok wordt gecanonicaliseerd (Exclusive) en gehasht (SHA256). De handtekening zelf is van het type RSA-SHA256. De ds:KeyInfo verwijst naar de saml:Assertion op basis dmv AssertionID.
Voorbeeld met PICT (vereenvoudigd)
De derde operatie van PICT (checkBrokeredAccess) vereist een SAML-token van STS. U test hiermee dat het token verkregen van STS in stap 2 correct gekopieerd wordt in de oproep naar de business webservice.
<soapenv:Envelope> <soapenv:Header> <wsse:Security> <saml:Assertion AssertionID="ID_56eecf2a-a143-4ec9-ab85-479d8602122f" IssueInstant="2011-07-07T07:15:16.772Z" Issuer="https://services.socialsecurity.be/sts" MajorVersion="1" MinorVersion="1" wsu:Id="ID_56eecf2a-a143-4ec9-ab85-479d8602122f"> <saml:Conditions NotBefore="2011-07-07T07:15:16.619Z" NotOnOrAfter="2011-07-07T08:15:16.619Z"/> <saml:AuthenticationStatement AuthenticationInstant="2011-07-07T07:15:16.772Z" AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:X509-PKI"> ... </saml:AuthenticationStatement> <saml:AttributeStatement> ... </saml:AttributeStatement> <dsig:Signature> ... </dsig:Signature> </saml:Assertion> <wsu:Timestamp wsu:Id="Timestamp"> <wsu:Created>2011-07-07T07:15:17Z</wsu:Created> <wsu:Expires>2011-07-07T07:16:17Z</wsu:Expires> </wsu:Timestamp> <ds:Signature> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="xml-exc-c14n#"/> <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/> <ds:Reference URI="#id"> <ds:Transforms> <ds:Transform Algorithm="xml-exc-c14n#"/> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue>di3JiPJM90D3P62ChO1d4Sy12+4=</ds:DigestValue> </ds:Reference> <ds:Reference URI="#Timestamp"> <ds:Transforms> <ds:Transform Algorithm="xml-exc-c14n#"/> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue>C+GkwwH5RuXocsD0iphwUvmQpj0=</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue>kq+FG6qqdx...==</ds:SignatureValue> <ds:KeyInfo> <wsse:SecurityTokenReference> <wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID">ID_56eecf2a-a143-4ec9-ab85-479d8602122f</wsse:KeyIdentifier> </wsse:SecurityTokenReference> </ds:KeyInfo> </ds:Signature> </wsse:Security> </soapenv:Header> <soapenv:Body wsu:Id="id"> <pict:CheckBrokeredAccessControlRequest> <type:Message>echo 7c83de86-d94d-499b-a4d6-cc9cc44c9719</type:Message> <type:Timestamp>2010-12-23T15:12:07.821+01:00</type:Timestamp> </pict:CheckBrokeredAccessControlRequest> </soapenv:Body> </soapenv:Envelope>