.. _configuration_authentication_oidc_yivi:
=====================================
OpenID Connect voor inloggen met Yivi
=====================================
Open Formulieren ondersteunt `Yivi login `_ voor burgers en
ondernemers via het OpenID Connect protocol (OIDC).
Burgers en ondernemers kunnen op die manier inloggen op Open Formulieren met hun DigiD-
of eHerkenning-account of anoniem. In deze flow:
1. Klikt een gebruiker in een formulier op de knop *Inloggen met Yivi*
2. De gebruiker wordt via de omgeving van de OpenID Connect provider (bijv. Keycloak)
naar Yivi geleid, waar de gebruiker kan inloggen middels authenticatie-opties naar
keuze.
Per formulier kunnen aanvullende gegevens van de gebruiker gevraagd worden.
De gebruiker kan zelf bepalen deze gegevens te verstrekken.
3. Yivi stuurt de gebruiker terug naar de OIDC-omgeving, die op zijn beurt de gebruiker
weer terugstuurt naar Open Formulieren.
4. De gebruiker is ingelogd en kan verder met het invullen van het formulier.
Om gebruik te maken van Yivi dient de gebruiker te beschikken over een mobiele telefoon,
met daarop de Yivi authenticator-applicatie.
.. _configuration_oidc_yivi_claim_requirements:
Claim-eisen
===========
De OpenID Connect provider moet na een succesvolle login met Yivi een aantal claims
aanbieden aan Open Formulieren, afhankelijk van de gekozen authenticatie-optie. De
precieze namen van deze claims kunnen ingesteld worden in Open Formulieren.
Voor authenticatie met BSN
--------------------------
Wanneer een gebruiker kiest voor authenticatie met BSN, worden deze claims verwacht na de
login:
``BSN``
Het BSN van de ingelogde gebruiker. Altijd verplicht.
``betrouwbaarheidsniveau``
Het betrouwbaarheidsniveau gebruikt tijdens het inloggen. Dit wordt vastgelegd en
meegestuurd tijdens het registeren van formulierinzendingen. Als er geen claim is
ingevuld voor het betrouwbaarheidsniveau, dan wordt de standaardwaarde gebruik
(instelbaar in Open Formulieren).
Beheerders kunnen waardenvertalingen inrichten indien de provider de waarden
niet aanlevert zoals gedocumenteerd in de koppelvlakstandaard van Logius.
Voor authenticatie met KVK
--------------------------
Wanneer een gebruiker kiest voor authenticatie met KVK, worden deze claims verwacht na de
login:
``KVK``
Het KVK-nummer van het bedrijf. Altijd verplicht.
``betrouwbaarheidsniveau``
Het betrouwbaarheidsniveau gebruikt tijdens het inloggen. Dit wordt vastgelegd en
meegestuurd tijdens het registeren van formulierinzendingen. Als er geen claim is
ingevuld voor het betrouwbaarheidsniveau, dan wordt de standaardwaarde gebruik
(instelbaar in Open Formulieren).
Beheerders kunnen waardenvertalingen inrichten indien de provider de waarden
niet aanlevert zoals gedocumenteerd in de koppelvlakstandaard van Logius.
Voor authenticatie met pseudoniem
---------------------------------
Wanneer een gebruiker kiest voor authenticatie met pseudoniem, wordt deze claim verwacht
na de login:
``pseudo identifier claim``
De identificatie van de gebruiker die inlogt.
Yivi-attribuutgroepen
---------------------
Bij elke authenticatiemethode kunnen aanvullende attributen worden uitgevraagd. Hiermee
kunnen, naast identificatiegegevens, ook extra persoons- of bedrijfsgegevens worden
verkregen.
In Open Formulieren kunnen deze aanvullende attributen worden gedefinieerd als
:ref:`Yivi-attribuutgroepen `. Deze
attribuutgroepen kunnen vervolgens worden geconfigureerd in formulieren die gebruikmaken
van de ``Yivi via OpenID Connect`` authenticatie-plugin.
Elke attribuutgroep is per stuk optioneel; de gebruiker bepaalt zelf welke groepen wel
en niet te voorzien van informatie.
In Open Formulieren kunnen Yivi-attribuutgroepen geëxporteerd en geïmporteerd worden.
Zo kunt u eenvoudig attribuutgroepen delen met anderen of overzetten van een test- naar
productie-omgeving.
.. important:: Alle verzoeken aan Yivi vereisen het gebruik van Yivi-attributen. Ook voor
de BSN, KVK en betrouwbaarheidsniveau claims, moeten Yivi-attributen gebruikt worden.
Raadpleeg de `Yivi Attribute Index`_ voor een volledig overzicht van alle beschikbare
attributen.
.. _configuration_oidc_yivi_appgroup:
Configureren van OIDC-provider
==============================
Contacteer de IAM beheerders in je organisatie om een *Client* aan te
maken in de omgeving van de OpenID Connect provider.
**Redirect URI**
Voor de **Redirect URI** vul je ``https://open-formulieren.gemeente.nl/auth/oidc/callback/`` in,
waarbij je ``open-formulieren.gemeente.nl`` vervangt door het relevante domein.
**Gegevens**
Aan het eind van dit proces moet je de volgende gegevens hebben:
* Server adres, bijvoorbeeld ``login.gemeente.nl``
* Client ID, bijvoorbeeld ``a7d14516-8b20-418f-b34e-25f53c930948``
* Client secret, bijvoorbeeld ``97d663a9-3624-4930-90c7-2b90635bd990``
Configureren van OIDC in Open Formulieren
=========================================
Zorg dat je de volgende :ref:`gegevens ` hebt:
* Server adres
* Client ID
* Client secret
Navigeer vervolgens in de admin naar **Configuratie** > **OIDC provider** > **oidc-yivi-provider**.
Hier kan je de endpoints van de OIDC provider inrichten. Deze kunnen automatisch
bepaald worden aan de hand van het discovery endpoint
(``https://login.gemeente.nl/auth/realms/{realm}/.well-known/openid-configuration``).
#. Vul bij **Discovery endpoint** het pad naar het juiste authenticatie realm endpoint
van de OpenID Connect provider in (met een ``/`` op het einde),
bijvoorbeeld ``https://login.gemeente.nl/auth/realms/{realm}/``.
#. Laat de overige endpoints leeg - deze worden automatisch aangevuld.
Navigeer vervolgens in de admin naar **Configuratie** > **OIDC clients** > **oidc-yivi**.
Begin met de algemene instellingen.
Stel de algemene instellingen in:
#. Vink *Ingeschakeld* aan om OIDC in te schakelen.
#. Selecteer de provider die je net heb geconfigureerd in de **OIDC Provider** dropdown.
#. Vul bij **OpenID Connect client ID** het Client ID in, bijvoorbeeld
``a7d14516-8b20-418f-b34e-25f53c930948``.
#. Vul bij **OpenID Connect secret** het Client secret in, bijvoobeeld
``97d663a9-3624-4930-90c7-2b90635bd990``.
#. Laat bij **OpenID Connect scopes** de standaardwaarden staan, of stel deze in volgens
de instructies van je OpenID Connect provider.
#. Vul bij **OpenID sign algorithm** ``RS256`` in.
#. Laat **Sign key** leeg.
Stel dan de claims in:
Beginnend bij de claims gebruikt voor BSN-authenticatie.
#. Voer bij **Identity settings** > **BSN claim path** het pad van de claim in die het
BSN bevat, bijvoorbeeld ``pbdf.gemeente.personalData.bsn``.
#. Voer bij **LoA settings** > **BSN loa claim path** het pad van de claim in als die
bekend is, bijvoorbeeld ``pbdf.gemeente.personalData.digidlevel``. Indien niet,
kies dan bij **LoA settings** > **BSN Default loa** de waarde die het meest
van toepassing is. Dit wordt enkel gebruikt om vast te leggen met welk
betrouwbaarheidsniveau iemand ingelogd is.
#. Indien gewenst, dan kan je waardenvertalingen voor de betrouwbaarheidsniveaus
toevoegen, bijvoorbeeld:
* klik op "Add item"
* Kies "Tekstuele waarde" in de **From** dropdown en voer de waarde ``10`` op in het
tekstveld
* Selecteer "DigiD Basis" in de **To** dropdown
* Herhaal voor andere waarden en niveaus
Vervolgens richt je de claims voor KVK-authenticatie in.
#. Vul bij **Identity settings** > **KvK claim path** de claim in die het KVK-nummer
bevat, bijvoorbeeld ``pbdf.signicat.kvkTradeRegister.kvkNumber``.
#. Voer bij **LoA settings** > **KvK loa claim path** het pad van de claim in als die
bekend is. Indien niet, kies dan bij **LoA settings** > **KvK Default loa** de waarde
die het meest van toepassing is. Dit wordt enkel gebruikt om vast te leggen met welk
betrouwbaarheidsniveau iemand ingelogd is.
#. Indien gewenst, dan kan je waardenvertalingen voor de betrouwbaarheidsniveaus
toevoegen, bijvoorbeeld:
* klik op "Add item"
* Kies "Tekstuele waarde" in de **From** dropdown en voer de waarde ``00`` op in het
tekstveld
* Selecteer "Non existent" in de **To** dropdown
* Herhaal voor andere waarden en niveaus
Daarna richt je de claim voor authenticatie met pseudoniem in.
* De standaard waarde voor **Identity settings** > **Pseudo claim path** zal een Yivi-applicatie unieke waarde
opleveren. Indien gewenst kan je dit veranderen naar een andere identificatie waarde,
zoals een e-mailadres.
Vervolgens kan je de **Configuratie** > **Yivi Attribuutgroepen** instellen. Deze zijn niet noodzakelijk om de
Yivi-plugin te kunnen gebruiken, maar bieden wel meer mogelijkheden voor gebruikers en
formulierbouwers.
* Indien gewenst, kan je instellen welke attributen op formulierniveau geconfigureerd
kunnen worden, bijvoorbeeld:
* Typ in het **Groepnaam** tekstveld de naam van de groep in. Deze waarde wordt
enkel gebruikt om de attributenverzameling herkenbaar te maken in de
formulier-editor.
* In **Groepsbeschrijving** kan je de groep een begrijpelijke omschrijving geven,
hiermee kunnen formulierbouwers gemakkelijk herkennen waar de groep attributen voor
dient en welke gegevens ermee verzameld worden.
* Typ in het **Attributen**-tekstveld het attribuut dat voor deze groep gebruikt zal
worden. Om meerdere attributen in dezelfde groep te plaatsen, klik op "Add item"
en herhaal totdat je alle gewenste attributen hebt gedefinieerd.
* De waarde voor het **UUID** wordt automatisch bepaald. Dit is een sleutelwaarde die
in Open Formulieren wordt gebruikt als verwijzing naar deze Attribuutgroep.
* Voor een volgende attributengroep, klik op "Nog een Attribuutgroep toevoegen" en
herhaal de vorige stappen.
Klik tot slot linksonder op **Opslaan**.
Je kan nu een formulier aanmaken met de ``Yivi via OpenID Connect``
authenticatie-plugin, zie :ref:`manual_forms_basics`.
.. _configuration_oidc_yivi_attribute_groups:
Configureren van Yivi-attribuutgroepen in Open Formulieren
==========================================================
Navigeer in de admin naar **Configuratie** > **Yivi-attribuutgroepen** en klik op
**Yivi-attribuutgroep toevoegen**.
1. Vul bij **groepsnaam** een duidelijke en herkenbare naam in voor de groep.
(Deze naam wordt alleen gebruikt in de formulierconfiguratie ter identificatie van de
groep en heeft verder geen functionele waarde.)
2. Vul bij **groepsbeschrijving** een korte beschrijving van de groep.
(Deze beschrijving wordt alleen gebruikt in de formulierconfiguratie ter
verduidelijking van de groep en heeft verder geen functionele waarde.)
3. Vul bij **Attributen** de Yivi-attributen toe die tijdens het inloggen bevraagd moeten
worden. De beschikbare attributen zijn te vinden in de `Yivi Attribute Index`_.
Als de gebruiker deze attributen beschikbaar stelt, kunnen ze gebruikt worden voor
:ref:`voorinvullen (prefill) `.
Klik op **Add item** om meerdere attributen toe te voegen.
Klik vervolgens linksonder op **Opslaan** om de configuratie op te slaan.
De aangemaakte attributengroep is nu beschikbaar voor gebruik in formulieren die
gebruikmaken van de ``Yivi via OpenID Connect`` authenticatie-plugin.
.. _Yivi Attribute Index: https://portal.yivi.app/attribute-index