KNF:Korte uitleg SAML protocol

Uit Kennisnet Developers Documentatie
Ga naar: navigatie, zoeken

Entree Federatie-symbol.png Entree Federatie: Korte uitleg SAML protocol

Nl.gif Nederlands En.gif English


Entree Federatie functioneert op basis van het Single Sign On (SSO) principe. Een gebruiker logt slechts één keer in op zijn schoolomgeving (Identity Provider) en heeft vervolgens automatisch toegang tot de vele aangesloten diensten (Service Providers).

Binnen Entree Federatie verloopt de communicatie tussen Service Providers en Identity Providers via de centrale hub van Kennisnet. Het voordeel hiervan is dat iedere Service Provider (SP) en iedere Identity Provider (IdP) slechts één enkele koppeling met de centrale hub hoeft te onderhouden. De applicatie van Kennisnet vervult hierdoor de rol van Identity Provider voor alle aangesloten Service Providers en tegelijkertijd de rol van Service Provider richting alle Identity Providers.

Single Sign On is mogelijk doordat de verschillende applicaties volgens het SAML 2.0 protocol met elkaar communiceren. SAML staat voor Security Assertion Markup Language en is een open standaard voor het uitwisselen van authenticatie- en autorisatiegegevens. De standaard is ontwikkeld en wordt beheerd door het non-profit consortium OASIS.

Metadata

De verschillende partijen binnen Entree Federatie communiceren met elkaar op basis van vertrouwensrelatie. Hiervoor worden een aantal afspraken gemaakt over onder andere een unieke identifier, de rol van de partij, endpoints en informatie over versleuteling. Iedere partij legt dit vast in een metadata bestand, in XML formaat, en deze worden onderling uitgewisseld. Een vereenvoudigd voorbeeld van een metadata bestand voor een Service Provider ziet er als volgt uit:

<EntityDescriptor entityID="https://example.com">
   <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
      <KeyDescriptor>
         ...
      </KeyDescriptor>
      <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
                                Location="https://example.com/sso" index="0"/>
   </SPSSODescriptor>
</EntityDescriptor>
  • Het verplichte attribuut entityID bevat de unieke identifier van de applicatie, bij voorkeur in de vorm van een URL.
  • Het element <SPSSODescriptor> beschrijft de rol van de Service Provider. Voor een Identity Provider is dit <IDPSSODescriptor>.
  • Het attribuut protocolSupportEnumeration bevat de ondersteunde protocollen, in dit voorbeeld het SAML 2.0 protocol.
  • <KeyDescriptor> bevat informatie over de gebruikte versleuteling.
  • De <AssertionConsumerService> bevat het endpoint waarnaar een Identity Provider de berichten voor de Service Provider kan versturen, in dit geval via een HTTP-POST binding.

Web Browser SSO profiel

In de SAML specificatie zijn profielen gedefinieerd voor verschillende use cases, in de context van Entree Federatie richten we ons op het Web browser SSO profiel. Hierin wil een gebruiker via zijn browser de afgeschermde website van de Service Provider bezoeken. Om te bepalen of de gebruiker toegang krijgt tot de website wil de Service Provider de identiteit van de gebruiker vaststellen. De Service Provider vraagt hiervoor de Identity Provider om een verklaring (assertion) over de identiteit van de gebruiker af te leggen. Op basis van het antwoord van de Identity Provider bepaalt de Service Provider of de gebruiker toegang krijgt.

Authenticatie verzoek

Zoals gezegd start een authenticatie proces doordat een gebruiker de afgeschermde content van een Service Provider probeert te benaderen. De Service Provider verstuurd vervolgens een verzoek om authenticatie naar de Identity Provider. Dit gebeurt in de vorm van een AuthnRequest.

<AuthnRequest ID="_1234567890abcdefgh"
              Version="2.0"
              IssueInstant="2017-01-01T12:00:00Z"
              Destination="https://aselect.entree.kennisnet.nl/openaselect/profiles/saml2/sso/web"
              AssertionConsumerServiceURL="https://referentie.entree.kennisnet.nl/saml/module.php/saml/sp/saml2-acs.php/RefSPSAML"
              ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST">
    <Issuer>https://referentie.entree.kennisnet.nl/sp</Issuer>
    <NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" AllowCreate="true"/>
</AuthnRequest>