...
De SSO-functionaliteit is gebonden aan deze beperkingen:
een beperkte levensduur - kies een duurtijd van < 5 minuten
aanmelden moet in dezelfde browserinstantie
geen garantie dat de gebruikerscontext bewaard blijft tussen de verschillende applicaties
bij embedded gebruik kan de functionaliteit geïmpacteerd worden door de third-party cookieproblematiek
...
Om een aantal beperkingen bij de klassieke werking van single sign-on op te lossen, gebruiken we Token Exchange om een OAuth Access Token te generen dat gebruikt kan worden door de Aanvraagmodule.
...
Voorwaarde
De Aanvraagmodule moet een trust-relatie hebben met de Mijn Burgerprofiel Client-ID (zie Bijlage - Mijn Burgerprofiel Client-ID- zie )
Stroomdiagram
Drawio | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Implementatie
Standaard zal een aanvraagmodule gebruik maken van OpenId maakt de Aanvraagmodule gebruik van OpenID Connect (op basis van authorization code Authorization Code grant) in kader van voor geauthenticeerde formulieren. Hoewel dit geen probleem vormt voor een formulier dat Dit verloopt vlot voor formulieren die in stand-alone modus getoond wordt worden. Maar voor formulieren die embedded worden getoond, kan dit wel problemen veroorzaken in embedded modus.
Gebruikerscontext doorgeven aan een
...
Aanvraagmodule
Hiervoor moet mijn Burgerprofiel het OAuth Access Token - verkregen via de voorgaande Token Exchange - worden doorgegeven vanuit Mijn Burgerprofiel. Gezien doorgeven. Door de gevoeligheid van het OAuth Access Token moet dit altijd via een server-to-server operatie verlopen .Om dit te bereiken dient de aanvraagmodule als volgt:
De Aanvraagmodule moet een API-endpoint
...
voorzien volgens de onderstaande API
...
-specificaties.
Mijn Burgerprofiel (server) roept
...
dat API-endpoint
...
aan om een OAuth Access token te registreren.
...
Het resultaat van die registratie moet
...
een tijdelijk, éénmalig te gebruiken token
...
zijn, dat
...
wordt doorgegeven
...
zodra de Aanvraagmodule wordt geopend in de browser
...
.
Info |
---|
Opmerking: Mijn Burgerprofiel zal gebruik maken van de Client ID vermeld in de Formulieren API response om de “audience” claim correct in te stellen tijdens het Token Exchange proces. |
Aanvraagmodule - SSO Token (Swagger)
Swagger integration | ||
---|---|---|
| ||
{ "openapi": "3.0.2", "info": { "title": "Aanvraagmodule - SSO Token", "version": "1.0" }, "components": { "schemas": { "RequestToken": { "type": "object", "required": [ "token", "token_type" ], "properties": { "token": { "type": "string", "description": "Token ontvangen via IdP Token Exchange" }, "token_type": { "type": "string", "description": "Type token ontvangen via IdP Token Exchange", "enum": [ "urn:ietf:params:oauth:token-type:access_token" ] } } }, "ResponseTempToken": { "type": "object", "required": [ "token" ], "properties": { "token": { "type": "string", "description": "Tijdelijk SSO Token" } } }, "ClientError": { "type": "object", "required": [ "error" ], "properties": { "error": { "type": "string", "description": "Foutmelding" } } }, "ServerError": { "type": "string" } } }, "servers": [ { "description": "Form provider", "url": "https://formulier.vlaanderen.be" } ], "paths": { "/auth/v1/token": { "post": { "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RequestToken" } }, "application/x-www-form-urlencoded": { "schema": { "$ref": "#/components/schemas/RequestToken" } } } }, "responses": { "200": { "description": "Vraagstelling is geaccepteerd en een tijdelijk token werd gegenereerd", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResponseTempToken" } } } }, "400": { "description": "Vraagstelling ontbreekt verplichte velden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientError" } } } }, "401": { "description": "Ongeldig of vervallen token in de vraagstelling", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientError" } } } }, "500": { "description": "Onverwacht probleem opgetreden in de applicatie bij het verwerken van het token", "content": { "text/html": { "schema": { "$ref": "#/components/schemas/ServerError" } } } } } } } } } |
Het verkregen tijdelijk token zal door Mijn Burgerprofiel worden doorgegeven Mijn Burgerprofiel geeft het tijdelijke token door als query-parameter via de formulier URL. De exacte waarde die gebruikt zal worden wordt voor de query parameter naam dient door te stromen -parameternaam moet doorstroome via de Formulieren API-specificatie.
...
Voorbeeld:
https://formulier.vlaanderen.be/f6d35977-f45d-4710-befc-21e2812d83ea?token=<TEMP-TOKEN>
...
Het token verwerken in de
...
Aanvraagmodule
Wanneer de aanvraagmodule een token ontvangt dient men volgende stappen uit te voerenDoorloop de volgende stappen nadat de Aanvraagmodule het token heeft ontvangen:
Controleer dat het
...
tijdelijke token niet vervallen is
...
.
Controleer dat het tijdelijk token nog niet gebruikt is.
Valideer het uitgewisselde OAuth Access Token
...
...
Indien aan alle voorgenoemde voorwaarden is voldaan, kan de aanvraagmodule Aanvraagmodule een nieuwe sessie opstarten op basis van de gebruikerscontext die beschikbaar gesteld is via het OAuth Access Token.
...