Tools4ever Tech Blog

SAML, wat is het en wat doet het?

Robbert Brussaard - Software Engineer | 27 januari 2016

Tools4ever heeft een nieuw SSO-product ontwikkeld, HelloID. HelloID is een online platform dat verschillende technologieën en protocollen combineert, die ervoor zorgen dat de gebruiker op zoveel mogelijk applicaties toegang krijgt zonder daar steeds opnieuw voor te moeten inloggen. Een van die protocollen is de Security Assertion Markup Language, oftewel SAML.

SAML omvat veel en om dit allemaal goed te begrijpen zal ik dit in delen uitleggen. Ik begin in dit eerste deel met: wat is SAML en wat doet het? In mijn volgende blog, zal ik ingaan op de techniek en uitdagingen om het te implementeren.

Let op: tijdens dit blog zal ik verschillende termen gebruiken die gangbaar zijn bij SAML. Ik heb een woordenlijst onderaan het bericht toegevoegd om deze termen toe te lichten.

Wat is het?

SAML, zoals eerder aangegeven staat voor Security Assertion Markup Language. Als je de naam zo leest zegt het dat het over een taal gaat. Maar als wij het over SAML hebben dan hebben we het over meer dan een taal. In mijn ogen omvat SAML twee dingen:

  • Een op XML-gebaseerde standaard voor de berichten die worden uitgewisseld tussen verschillende systemen (deze standaard is samengesteld door OASIS);
  • Een communicatieprotocol, een set van afspraken en regels om authenticatie en autorisatie tussen systemen te realiseren.

Wat doet het?

Met SAML kunnen wij dus beveiligingsinformatie uitwisselen met andere systemen om de gebruiker op andere applicaties te authentiseren of zelfs informatie uit een ander systeem te gebruiken om de gebruiker op ons product te authentiseren. Om dit wat levendiger te maken zal ik een concreet voorbeeld te gebruiken:

De gebruiker logt in op het HelloID-portaal. HelloID toont de gebruiker een overzicht van applicaties, Office 365, Zendesk en meer. De gebruiker klikt op Zendesk en is zonder tussenkomst van een inlog-pagina ingelogd bij Zendesk. Dus eenmaal authentiseren en daarna niet meer.

Hetzelfde voorbeeld maar dan met de standaard en communicatie van SAML ertussen:

  1. De gebruiker logt in op het HelloID-portaal (Identity provider, IdP). In dit geval met een gebruikersnaam en wachtwoord combinatie, andere vormen van authenticatie zijn mogelijk;
  2. HelloID toont de gebruiker een overzicht van applicaties;
  3. De gebruiker klikt op Zendesk (Service provider, SP);
  4. HelloID maakt als IdP een SAML-bericht om een authenticatie uit te voeren bij de SP. HelloID ondertekent en/of versleutelt het bericht door middel van een certificaat;
  5. Het bericht wordt verstuurd naar de SP endpoint (Assertion consumer service, ACS);
  6. SP ontvangt het bericht en valideert deze aan de hand van een certificaat, dit moet overeenkomen met hetzelfde certificaat als dat in ons systeem staat ingesteld en wat als onderdeel van de initiële configuratie is ingesteld. (De systemen moeten elkaar kunnen vertrouwen). SP maakt een sessie voor de gebruiker aan in haar systeem, mits het ons bericht vertrouwd. Het is aan de SP hoe zij met verdere afhandeling omgaat zoals: controle voor autorisaties, Just-in-time provisioning en controle of het van het juiste adres afkomstig is e.d.;
  7. De gebruiker is zonder tussenkomst van een inlog-pagina ingelogd bij Zendesk (SP).

Flow - IdP initiated

Deze (happy) flow wordt 'IdP initiated' genoemd. De andere variant is 'SP initiated', deze zal ik niet in deze serie behandelen. In het volgende bericht leg ik uit hoe het technisch werkt.

Woordenlijst

  • ACS, Assertion consumer service, Endpoint: Webadres van de SP waar een SAML bericht wordt geconsumeerd (afgehandeld).
  • IdP, Identity Provider, SAML authority: De partij (het systeem) dat de identiteiten van de gebruikers bevat. Dit systeem levert de identiteiten aan de SP.
  • SP, Service provider, SAML consumer: De partij (het systeem) waarop wordt ingelogd door middel van een geauthentiseerd identiteit van een andere partij (IdP). Dit systeem gebruikt de identiteiten van het andere systeem om op haar systeem in te loggen en autorisatie af te dwingen.
  • IdP initiated: De naam van de flow wanneer het SAML-protocol wordt gestart vanaf de IdP.
  • SP initiated: De naam van de flow wanneer het SAML-protocol wordt gestart vanaf de SP.