SAML
SAML, die Security Assertion Markup Language, ist ein XML-basiertes Framework zum Austausch von Authentizierungs- und Authorisierungsdaten zwischen verschiedenen Sicherheitsdomänen. Der Austausch findet zwischen einem Service Provider und einem Identity Provider statt. Es wird angenommen, dass der Prinzipal bei mindestens einem Identity Provider bekannt ist. Vom Identity Provider wird erwartet, dass er ein lokales Authentizierungssystem bereitstellt. Der Service Provider verlässt sich auf den Identity Provider zur Identifizierung des Prinzipals. Auf eine Anfrage des Prinzipals erstellt der Identity Provider eine SAML assertion für den Service Provider. Anhand dieser Assertion kann der Service Provider eine Zugangsentscheidung treffen.
Konzepte
SAML besteht aus mehreren aufeinander aufbauenden Komponenten. Diese erlauben, wenn zusammengesetzt, eine Vielzahl von Anwendungsfällen. SAML Assertions beinhalten Aussagen einer Partei über ein Subjekt. Beispielsweise könnte eine Assertion aussagen, dass das Subjekt John Doe heißt und die E-Mail Adresse john.doe@example.com hat. Solche Assertions werden meist nur basierend auf einer Anfrage erstellt, können aber unter bestimmten Umständen auch initial an den Empfänger gesendet werden. Es gibt drei verschiedene Statements: Authentication, Attribute, Authorization Decision Statement. Die SAML Protokolle definieren Anfragen und Antworten einer korrekten Kommunikation mithilfe von SAML-Werkzeugen. Es gibt sechs verschiedene SAML-Protokolle, dazu gehört das Authentication Request Protocol, welches Anwendung im Web Single Sign-On Fall findet. Weiter wichtige Protokolle sind das Artifact Resolution Protocol und das Single Logout Protocol. Durch SAML-Bindings wird der Transport der Nachrichten selbst organisiert, beispielsweise HTTP oder SOAP. Es werden von SAML 6 Bindings definiert. Profile haben bei SAML zwei Bedeutungen. Zum einen versteht man darunter eine Kombination beziehungsweise Einschränkung der zugrunde liegenden Komponenten für einen bestimmten Anwendungsfall. Dazu gehören 5 Single Sign-On und drei einzelne Profile. Zum anderen versteht man unter einem SAML Profil einen definierten Satz von Regeln zur Abbildung von Attributen aus andern Systemen. Beispielsweise wie Attribute aus einem LDAP-System in einer SAML-Assertion als Attribut abgebildet werden können.
SAML-Assertion
1: <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 2: Version="2.0" 3: IssueInstant="2005-01-31T12:00:00Z"> 4: <saml:Issuer Format=urn:oasis:names:SAML:2.0:nameid-format:entity> 5: http://idp.example.org 6: </saml:Issuer> 7: <saml:Subject> 8: <saml:NameID 9: Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"> 10: j.doe@example.com 11: </saml:NameID> 12: </saml:Subject> 13: <saml:Conditions 14: NotBefore="2005-01-31T12:00:00Z" 15: NotOnOrAfter="2005-01-31T12:10:00Z"> 16: </saml:Conditions> 17: <saml:AuthnStatement 18: AuthnInstant="2005-01-31T12:00:00Z" SessionIndex="67775277772"> 19: <saml:AuthnContext> 20: <saml:AuthnContextClassRef> 21: urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport 22: </saml:AuthnContextClassRef> 23: </saml:AuthnContext> 24: </saml:AuthnStatement> 25: </saml:Assertion>
Die dargestellte Assertion enthält ein einzelnes Authentication Statement:
- Zeile 1 beginnt die Assertion und enthält die Deklaration des SAML-Assertion Namespace.
- Die Zeilen 2 bis 6 enthalten Metadaten der Assertion: welche Version von SAML benutzt wird, wann die Assertion erstellt wurde und wer sie erstellt hat.
- Die Zeilen 7 bis 12 enthalten Informationen über das Subjekt der Assertion. Es hat einen Name Identifier, dessen Wert j.doe@example.com ist und ein bestimmtes Format besitzt.
- Die Zeilen 13 bis 16 geben die Gültigkeit der Assertion an. Diese Assertion war gültig von 31.01.2005 12:00 mittags UTC bis 10 Minuten später.
- Zeilen 17 bis 24 enthalten das Authentication Statement. Das Subjekt wurde zur angegebenen Zeit durch einen Passwort gesicherten Transport Mechanismus, zum Beispiel Eingabe von Benutzername und Passwort Eingabe in einer SSL- gesicherten Browser-Session, authentifiziert. Außerdem angegeben ist die Zeit zu der die Authentisierung stattgefunden hat.
Attribute Statement
1: <saml:AttributeStatement> 2: <saml:Attribute 3: xmlns:x500="urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500" 4: NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" 5: Name="urn:oid:2.5.4.42" 6: FriendlyName="givenName"> 7: <saml:AttributeValue xsi:type="xs:string" 8: x500:Encoding="LDAP">John</saml:AttributeValue> 9: </saml:Attribute> 10: <saml:Attribute 11: NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" 12: Name="LastName"> 13: <saml:AttributeValue 14: xsi:type="xs:string">Doe</saml:AttributeValue> 15: </saml:Attribute> 16: <saml:Attribute 17: NameFormat="http://smithco.com/attr-formats" 18: Name="CreditLimit"> 19: xmlns:smithco="http://www.smithco.com/smithco-schema.xsd" 20: <saml:AttributeValue xsi:type="smithco:type""> 21: <smithco:amount currency="USD">500.00</smithco:amount> 22: </saml:AttributeValue> 23: </saml:Attribute> 24: </saml:AttributeStatement>
Attributsinformationen fallen häufig als Beiprodukt eines Single-Sign-On Vorgangs an oder werden auf explizite Nachfrage bestimmter Attribute übermittelt. SAML Attribute Statements haben den dargestellten Aufbau. Sie können ein oder mehrere Attribute enthalten. Im Beispiel enthält das Attribute Statement drei Attribute beginnend auf Zeile 2, 10 und 16. Alle Attributnamen haben ein Format. Im ersten Fall wird das SAML X.500/LDAP Profile genutzt. Das LDAP Attribut, welches durch OID 2.5.4.42 identifiziert wird, heißt givenName und der Attributwert ist John. Beim zweiten Attribut wird das SAML Basic Attribute Profile genutzt. Das Attribut heißt LastName und enthält den Wert Doe. Das dritte Attribut hat ein Format, das nicht von SAML definiert ist, sondern von SmithCo. Das CreditLimit des Benutzers ist 500 USD. Die Werte der Attribute können einfache Datentypen sein, wie in den ersten beiden Fällen, oder weiter strukturiertes XML wie im dritten Fall.