Delen via


SAML-tokens en -claims

SamL-tokens (Security Assertions Markup Language) zijn XML-weergaven van claims. Standaard worden SAML-tokens wcf-tokens (Windows Communication Foundation) gebruikt in federatieve beveiligingsscenario's.

SAML-tokens bevatten instructies die sets claims zijn die door de ene entiteit over een andere entiteit worden gemaakt. In federatieve beveiligingsscenario's worden de instructies bijvoorbeeld uitgevoerd door een beveiligingstokenservice over een gebruiker in het systeem. De beveiligingstokenservice ondertekent het SAML-token om de juistheid van de instructies in het token aan te geven. Daarnaast is het SAML-token gekoppeld aan cryptografisch sleutelmateriaal waarvan de gebruiker van het SAML-token kennis bewijst. Dit bewijs voldoet aan de relying party dat het SAML-token in feite aan die gebruiker is uitgegeven. Bijvoorbeeld in een typisch scenario:

  1. Een client vraagt een SAML-token aan bij een beveiligingstokenservice, waarbij deze wordt geverifieerd bij die beveiligingstokenservice met behulp van Windows-referenties.

  2. De beveiligingstokenservice geeft een SAML-token uit aan de client. Het SAML-token is ondertekend met een certificaat dat is gekoppeld aan de beveiligingstokenservice en bevat een bewijssleutel die is versleuteld voor de doelservice.

  3. De client ontvangt ook een kopie van de bewijssleutel. De client presenteert vervolgens het SAML-token aan de toepassingsservice (de relying party) en ondertekent het bericht met die bewijssleutel.

  4. De handtekening via het SAML-token vertelt de relying party dat de beveiligingstokenservice het token heeft uitgegeven. De berichthandtekening die is gemaakt met de bewijssleutel, vertelt de relying party dat het token is uitgegeven aan de client.

Van claims naar SamlAttributes

In WCF worden instructies in SAML-tokens gemodelleerd als SamlAttribute objecten, die rechtstreeks vanuit Claim objecten kunnen worden ingevuld, mits het Claim object een Right eigenschap heeft van PossessProperty en de Resource eigenschap van het type Stringis. Bijvoorbeeld:

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)

Notitie

Wanneer SAML-tokens worden geserialiseerd in berichten, ofwel wanneer ze worden uitgegeven door een beveiligingstokenservice of wanneer ze worden gepresenteerd door clients aan services als onderdeel van verificatie, moet het maximale quotum voor de berichtgrootte voldoende groot zijn om het SAML-token en de andere berichtonderdelen te kunnen verwerken. In normale gevallen zijn de standaard quota voor berichtgrootte voldoende. In gevallen waarin een SAML-token echter groot is omdat het honderden claims bevat, moet u mogelijk de quota verhogen om tegemoet te komen aan het geserialiseerde token. Zie Beveiligingsoverwegingen voor gegevens voor meer informatie.

Van SamlAttributes naar Claims

Wanneer SAML-tokens worden ontvangen in berichten, worden de verschillende instructies in het SAML-token omgezet in IAuthorizationPolicy objecten die in de AuthorizationContext. De claims van elke SAML-instructie worden geretourneerd door de eigenschap van de ClaimSetsAuthorizationContext en kunnen worden onderzocht om te bepalen of de gebruiker moet worden geverifieerd en geautoriseerd.

Zie ook