SAML-Token und SAML-Ansprüche

Security Assertions Markup Language (SAML)-Token sind XML-Darstellungen von Ansprüchen. SAML-Token, die Windows Communication Foundation (WCF) in Verbund-Sicherheitsszenarien verwendet, werden standardmäßig als Token ausgegeben.

SAML-Token enthalten Anweisungen, die Sets mit Ansprüchen sind, die von einer Entität über eine andere Entität gemacht wurden. In Verbundsicherheitsszenarien werden Anweisungen beispielsweise von einem Sicherheitstokendienst über einen Benutzer im System getroffen. Der Sicherheitstokendienst signiert das SAML-Token, um die Richtigkeit der Anweisungen im Token zu bestätigen. Darüber hinaus ist das SAML-Token kryptografischen Schlüsselmaterialien zugewiesen, wobei der Benutzer des SAML-Tokens beweisen muss, dass er um diese Materialien weiß. Dieser Beleg reicht aus, um die vertrauende Seite zu überzeugen, dass das SAML-Token tatsächlich für diesen Benutzer ausgestellt wurde. Ein typisches Szenario sieht folgendermaßen aus:

  1. Ein Client fordert einen SAML-Token von einem Sicherheitstokendienst an, wobei er sich bei diesem Dienst mit den Windows-Anmeldeinformationen authentifiziert.

  2. Der Sicherheitstokendienst stellt dem Client einen SAML-Token aus. Das SAML-Token wird mit einem dem Sicherheitstokendienst zugewiesenen Zertifikat signiert und enthält einen Prüfschlüssel, der für den Zieldienst verschlüsselt wurde.

  3. Der Client empfängt auch eine Kopie des Prüfschlüssels. Der Client übergibt das SAML-Token dann an den Anwendungsdienst (die vertrauende Seite) und signiert die Nachricht mit diesem Prüfschlüssel.

  4. Die Signatur über dem SAML-Token zeigt der vertrauenden Seite, dass der Sicherheitstokendienst das Token ausgestellt hat. Die mit dem Prüfschlüssel erstellte Nachrichtensignatur zeigt der vertrauenden Seite, dass das Token für den Client ausgestellt wurde.

Von Ansprüchen zu SamlAttributes

In WCF werden Anweisungen in SAML-Token als SamlAttribute-Objekte modelliert, die direkt aus Claim-Objekten gefüllt werden können, vorausgesetzt das Claim-Objekt hat die Right-Eigenschaft des Typs PossessProperty und die Resource-Eigenschaft des Typs String. Zum Beispiel:

Claim myClaim = new Claim(
    ClaimTypes.GivenName, "Martin", Rights.PossessProperty);
SamlAttribute sa = new SamlAttribute(myClaim);
Dim myClaim As New Claim(ClaimTypes.GivenName, "Martin", _
Rights.PossessProperty)
Dim sa As New SamlAttribute(myClaim)

Hinweis

Wenn SAML-Token in Nachrichten serialisiert werden, z. B. wenn sie von einem Sicherheitstokendienst ausgestellt werden oder von Clients im Rahmen der Authentifizierung an Dienste gegeben werden, muss das Kontingent für die maximale Nachrichtengröße groß genug sein, um das SAML-Token und die anderen Teile der Nachricht aufnehmen zu können. Normalerweise ist das Kontingent für Nachrichten in Standardgröße ausreichend. Wenn jedoch ein SAML-Token sehr groß ist, da es mehrere Hundert Ansprüche enthält, müssen Sie u. U. das Kontingent vergrößern, um das serialisierte Token aufnehmen zu können. Weitere Informationen finden Sie unter Sicherheitsüberlegungen zu Daten.

Von SamlAttributes zu Ansprüchen

Wenn SAML-Token in Nachrichten empfangen werden, werden die unterschiedlichen Anweisungen im SAML-Token in IAuthorizationPolicy-Objekte umgewandelt, die in den AuthorizationContext gesetzt werden. Die Ansprüche aus jeder SAML-Anweisung werden von der ClaimSets-Eigenschaft des AuthorizationContext zurückgegeben und können überprüft werden, um zu bestimmen, ob der Benutzer authentifiziert und autorisiert werden soll

Siehe auch