Datum: 2026-04-22
Proposed
Binnen MOZa worden steeds meer gepersonaliseerde functies ontwikkeld. Voor de functionaliteit rondom actualiteiten (artikelen, subsidies, wetswijzigingen, "Berichten in uw buurt") hebben we aanvankelijk voorkeuren zoals PostcodeVoorkeur en OnderwerpVoorkeur tijdelijk in de Profiel Service ondergebracht, omdat daar al een voorkeurmechanisme beschikbaar was.
Inmiddels ontstaat er meer gegevensbehoefte rondom actualiteiten: naast postcode- en onderwerpvoorkeuren willen we ook gemarkeerde (favoriete) artikelen en mogelijk verdere applicatie-specifieke gebruikerscontext opslaan. Dat dwingt tot een principiëlere vraag: horen deze gegevens wel in de Profiel Service thuis?
De conclusie is dat ze dat niet doen. De Profiel Service heeft als doel het vastleggen van contact- en communicatievoorkeuren van een partij die organisatie-overstijgend gebruikt kunnen worden. De voorkeuren rondom actualiteiten zijn geen generieke contactvoorkeuren, maar zijn inherent verbonden aan de functionaliteit van één specifieke toepassing: de Actualiteiten Service. Ze hebben buiten die toepassing geen betekenis en passen daarmee niet binnen de scope en het doelbindingskader van de Profiel Service.
| Gegeven | Thuishorend in | Reden |
|---|---|---|
| Postcode-voorkeur | Actualiteiten Service | Voorkeur uitsluitend relevant voor actualiteiten |
| Onderwerp-voorkeur | Actualiteiten Service | Voorkeur uitsluitend relevant voor actualiteiten |
| Favoriete artikelen | Actualiteiten Service | Applicatie-specifiek gebruikersgedrag |
Deze gegevens moeten nog wel gekoppeld worden aan een persoon/partij op één of andere manier. Het rechtstreeks opslaan van BSN of KVK-nummer in elke nevenservice is uit oogpunt van dataminimalisatie en AVG onwenselijk.
Omdat authenticatie centraal via Keycloak en de API-gateway verloopt (zie ADR 0006), beschikt iedere nevenservice per request al over een geldig JWT met een stabiele subject claim (sub). Deze subject claim is een niet-raadbare, pseudonieme identifier per partij; BSN en KVK-nummer blijven daarmee beperkt tot de onderdelen die ze daadwerkelijk nodig hebben. De nevenservice gebruikt de subject claim als sleutel waaronder zij de applicatie-specifieke gegevens van een partij opslaat.
Er is daarmee geen aanvullend koppelmechanisme in de Profiel Service nodig: de subject claim vervult die rol al, zonder extra opzoeking vanuit de nevenservice.
sub) uit het JWT dat via de API-gateway wordt meegegeven. Er wordt geen BSN of KVK-nummer aan nevenservices doorgegeven en er wordt geen aparte koppelcode in de Profiel Service geïntroduceerd.PostcodeVoorkeur en OnderwerpVoorkeur verdwijnen uit de Profiel Service.Momenteel ontvangt elke nevenservice dezelfde sub-waarde voor een gebruiker, omdat de API-gateway één token doorgeeft dat voor alle backends wordt gebruikt. Twee nevenservices kunnen hun gegevens daardoor in principe op basis van sub aan elkaar koppelen.
Indien op termijn sterker gepseudonimiseerd moet worden, of als de correlatiegrens tussen onze eigen diensten scherper moet worden getrokken kan Keycloak per OIDC-cliënt een pairwise subject identifier uitgeven. In dat model ontvangt iedere cliënt een eigen, niet-linkbare sub voor dezelfde gebruiker.
Dat vergt wel dat elke nevenservice een eigen cliëntrelatie met Keycloak heeft, óf dat de gateway per backend een token exchange uitvoert zodat elke service een audience-specifiek token krijgt. De huidige "één-token-voor-alle-backends"-opzet is met pairwise niet meer toereikend.
Deze stap is nu niet nodig, maar is wel een logisch vervolg als het identificatieniveau tussen nevenservices strikter moet worden.