Bestimmte Funktionalitäten sind leider nicht verfügbar, da Ihr Browser das Javascript nicht berücksichtigt.
Zum Inhalt dieser Seite

Technische Angaben

Sicherheit - WS-Security SAML Token Profile / Holder-of-Key

Alle Services auf der SOA-Plattform (mit Ausnahme des SecurityTokenService) sind mit einem SAML-Token von einem zentralen Authentifizierungsdienst aufzurufen: SecurityTokenService (STS). Dies geschieht gemäß dem OASIS WS-Trust-Standard.

Das Authentifizierungsverfahren hat folgenden Ablauf:

  1. Der Service Consumer authentifiziert sich einmal beim STS mit einem X.509-Zertifikat.
  2. Er erhält vom STS ein signiertes SAML-Token, das 1 Stunde gültig ist.
  3. Mit diesem Token kann der Consumer eine Stunde lang verschiedene Webservices aufrufen.

Mittels Claims zeigt der Service Consumer an, für welches Unternehmen oder welche Eigenschaft er auftreten möchte. Der Claim entspricht der bei der Einrichtung des Webservice-Kanals erhaltenen Absendernummer.

Zur Information: Diesen STS-Mechanismus müssen Sie einmalig implementieren, bevor Sie einen Business Service aufrufen können.

Schritt für Schritt

Schritt 1

Der Service Consumer sendet ein RequestSecurityToken (RST) an STS mit dem Ersuchen, ein SAML 1.1-Token zu erhalten. Die Absendernummer wird als Claim spezifiziert, um mitzuteilen, für welches Unternehmen und welche Eigenschaft der Service Consumer ein Token anfordern möchte. Der Service Consumer signiert den SOAP Request daraufhin gemäß der X.509 _SHA256 Security Policy. Das verwendete Zertifikat muss mit dem Zertifikat übereinstimmen, das vorher in der Zugangsverwaltung geladen wurde.

Beispiel 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>
                  

Schritt 2

Nach der Authentifizierung wird der STS mit einer RequestSecurityTokenResponse (RSTR) antworten, die das angeforderte SAML-Token umfasst. Die SAML Assertion kann mit XPath gefiltert werden (//soapenv:Body/wst:RequestSecurityTokenResponse/wst:RequestedSecurityToken/*).

Beispiel 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>
                  

Das SAML-Token umfasst alle Attribute, die den Service Consumer identifizieren (Unternehmensnummer, Eigenschaft, Absendernummer).

Diese Attribute werden während der Zugangskontrolle vom Business Service evaluiert (Schritt 3).

Die XML-Struktur wird vom STS digital signiert, um die Echtheit zu garantieren. Der wst:Lifetime-Block gibt an, in welcher Periode das SAML-Token vom Service Consumer erneut verwendet werden kann.

Schritt 3

Mit einem SAML-Token, das von STS bezogen wurde, kann der Consumer während einer Stunde verschiedene Business Webservices aufrufen.

Der wsse:Security-Header umfasst folgende Elemente:

  1. saml:Assertion ist das durch STS signierte SAML-Token. Die XML-Daten dürfen nicht geändert werden (keine Formatierung, keine Namensraum-Änderungen), sonst wird die digitale Signatur gebrochen.
  2. wsu:Timestamp mit einer maximalen Gültigkeit von 5 Minuten;
  3. ds:Signature mit der digitalen Signatur per TMS und soapenv:Body. Jeder Block wird in die vorschriftsmäßige Form gebracht (Exclusive) und gehasht (SHA-256). Die Signatur selbst ist vom Typ RSA-SHA256. Die ds:KeyInfo verweist auf die saml:Assertion auf Basis des AssertionID.

Beispiel mit PICT (vereinfacht)

Für die dritte Operation von PICT (checkBrokeredAccess) ist ein SAML-Token vom STS erforderlich. Damit testen Sie, dass das vom STS in Schritt 2 erhaltene Token korrekt in den Aufruf an den Business Webservice kopiert wird.

                    <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>