DigiD SAML authenticatie

Gemaakt door Mark Duijkers, Gewijzigd op Di, 30 Mei, 2023 om 2:03 PM op Inger Koffijberg

Sinds tripleforms 4.3 is er een generieke SAML authenticatie module. Deze module kan gebruikt worden om bijvoorbeeld met DigiD, eherkenning, eIDAS of een andere IDP (identity provider) te koppelen. In dit artikel beschrijven we hoe je de module met DigiD kan koppelen. 



Benodigdheden en tips

 

- Zorg ervoor dat de IIS application pool rechten heeft op de private key 

All Tasks -> Manage Private Keys...

Zorg ervoor dat IIS AppPool er bij staat en de machine waar IIS op draait geselecteerd is onder "Locations..."

- Zorg er ook voor dat de key van het certificaat als exporteerbaar is gemarkeerd bij het installeren van het certificaat met private key.

Dit kun je achteraf controleren door het certificaat te exporteren ("All Tasks -> Export...").

Als dit werkt dan is het certificaat als exporteerbaar gemarkeerd. Zo niet, dan dien je het certificaat met private key opnieuw in de certificate store te zetten.

In deze afbeelding is de key dus niet exportable. Installeer het certificaat opnieuw.In deze afbeelding is de key dus niet exporteerbaar. Installeer het certificaat opnieuw.



Inrichten DigiD SAML koppeling aanvulling op de generieke instructie


Open je tripleforms project vanuit de editor en open de settings van je project


(TAB) General

Classifier: Voor DigiD kies PublicDomain (De dienst valt binnen het publieke domein) 



(TAB) Identity provider

Druk op de knop Load IDP metadata, hiermee laadt je de meeste gegevens in van de IDP. 



Gebruik onderstaande urls om de IDP van DigiD informatie in te laden.


Preproductie-omgeving 

https://rd.kodision.nl/idp/f275033d-0c21-4160-ac16-f5f168e27264/Metadata

 

Productie-omgeving

https://was.digid.nl/saml/idp/metadata



Druk na het invullen van de URL op Ok;


Voorbeeld:


Controleer of de signing correct staat sha1





(TAB) Service provider

 Voeg onderstaand toe

Entity ID:https://demo.kodision.nl/MijnOmgeving/Saml2/DigiD bestaat uit URL website plus Saml2{{Connector}}

NameIdFormat: Dit is het NameIdFormat van de NameIdPolicy wat mee wordt gestuurd bij het Authnrequest, voor DigiD moet de waarde Persistent gebruikt worden

Allow Create: Dit is het Allow Create van de NameIdPolicy wat mee wordt gestuurd bij het Authnrequest, voor DigiD moet deze aangevinkt worden

 




(TAB) Organization

Basisgegevens invullen


(TAB) Contact Persons

Voeg een persoon toe:



(TAB) Services

Voeg een service of meerdere services toe


Attribute Consuming Service Name: Voeg hetzelfde als het EntityID toe uit TAB Service Provider

Attribute Consuming Service ID: Voeg hetzelfde als het EntityID toe uit TAB Service Provider

Service index: Dit index nummer geeft je uiteindelijk vanuit je formulier mee, om de betreffende service te kunnen starten

Level of assurance: Het beveiligingsniveau van de verbinding. Naamgeving van de niveaus verschilt tussen de verschillende protocollen. 

DigiD beveiligingssniveaus 

  •  Basis urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport 
  •  Midden urn:oasis:names:tc:SAML:2.0:ac:classes:MobileTwoFactorContract 
  •  Substantieel urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard o Hoog urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI

Service description: Geef een omschrijving van de dient op

Service description url: Locatie van een uitgebreide dienstomschrijving meestal gemeente website url

Service Definition UUID: druk op de knop genereer

Service Instance UUID: druk op de knop genereer
Request attributes
: blijven leeg


Kies na het toevoegen voor een default service



Voeg de connector toe 

Druk op Add en daarna op Save




Inrichting SAML module in het project

Deze stap is alleen nodig als dit nog nooit eerder is gebeurd.


De SAML module dient aanwezig te zijn in de website van tripleforms, controleer dit in de website van tripleforms.


Als de module aanwezig is kan deze worden ingericht in het project, open het project van de tripleforms editor


Als de module niet aanwezig is in het project voegen we hem nu toe met de knop New.



Neem onderstaande configuratie over;




LabelValueDescription
IDSAML2 Module

DescriptionVoorbeeld module saml2 in tripleforms 4.3

URL~/modulesaml2/saml2.ascx

Parameters

ConnectionID

Naam van de connector uit de settings

Command
Command(SignIn, Logout)

AcsIndex

Indexnummer van de service

ForceAuthn
Forceer opnieuw te authenticeren, True = opnieuw, False = niet opnieuw, wordt gebruikt voor bv dubbele DigiD/Partner login

Results
isauthenticated

Geeft aan of de aanmelding is geslaagd (“true”) of niet (“false”). Gebruik deze waarde


nameidentifier
Name identifier

ResultCode
De resultaatcode van de aanmelding. De meest gangbare codes zijn 0000 (de gebruiker is succesvol aangemeld) en 0040 (de gebruiker heeft de aanmelding geannuleerd). Andere waarden geven aan dat de aanmelding is mislukt. In de documentatie van ASelect server vindt u de precieze betekenis van de verschillende waarden 

ResultMessage
Als de aanmelding is mislukt: een technische beschrijving van de reden van falen







Inrichting SAML module in het Scenario


De naam van de connector dient overeenkomen met naam van de connector die ingericht is in de settings van tripleforms. Als dit nog niet gebeurd is zien dan het aritkel Tripleforms 4.3: Generieke beschrijving Saml authenticatie koppelen IDP.


ConnectionID: Gebruik de connecter naam uit de settings

Vul het command SignIn bij parameters
AcsIndex: Gebruik het service Indexnummer van de service uit de settings
ForceAuthn: True bij partner login False bij enkele Login. Mag leeg blijven bij enkele login



Om de BSN van een gebruiker uit te lezen moeten de we parameter nameIdentifier uitlezen, plaats in het input een variabele op de bsn in te mappen.



ResultCode kan de volgende code teruggeven

ResultMessage kan de volgende code teruggeven


BSN: Let op Het bsn komt niet direct terug. Dit moet middels een setvars uit de nameidentifier gehaald worden. De BSN zit namelijk achter een reeks cijfers en een dubbele punt. In een setVars kun je de bsn ophalen. Een voorbeeld om dit op te halen is



Code snipped

[*Substring([#globals.bsn];[*Calc(2+[*IndexOf([#globals.bsn];:)])])]



Setvars gebruik van de code snipped


Fout afhandeling

Wanneer er geen succesvolle loginpoging is gedaan zal de parameter isauthenticated gevuld zijn met de waarde false. Dan dient er een foutafhandeling plaats te vinden.


DigiD kent 2 soorten foutafhandeling; Annuleren en een daadwerkelijke fout in de communcatie


Indien de resultcode anders is dan success en resultmessage anders is dan AuthnFailed dan is er een fout opgetreden. DigiD vereist een foutpagina indien er een fout is opgetreden. Gaat het niet om een fout dan zal het een annuleringsactie zijn. Zie eisen van DigiD op https://www.logius.nl/ 




Uiteindelijke scenario.




Web.config


Controleer of het volgende in de web.config is opgenomen


<configSections>
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</configSections>




<system.web>
<httpModules>
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</httpModules>
</system.web>


<system.webServer>
<modules>
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</modules>
</system.webServer>



Was dit artikel nuttig?

Dat is fantastisch!

Hartelijk dank voor uw beoordeling

Sorry dat we u niet konden helpen

Hartelijk dank voor uw beoordeling

Laat ons weten hoe we dit artikel kunnen verbeteren!

Selecteer tenminste een van de redenen
CAPTCHA-verificatie is vereist.

Feedback verzonden

We stellen uw moeite op prijs en zullen proberen het artikel te verbeteren