Zorgaanbiederauthenticatie en -autorisatie
0.1.0 - prototype
Publish Box goes here
Clientauthenticatie beantwoordt de vraag: welk geregistreerd systeem van welke zorgaanbieder vraagt een token aan? Zij verleent nog geen toegang tot een FHIR-resource; dat gebeurt pas bij autorisatie.
Vóór de tokenaanvraag beschikt het clientsysteem over:
De authorization server haalt de publieke clientkey uit de vertrouwde registratie. Een key uit de assertion zelf of uit een vrije requestparameter vestigt geen vertrouwen.
Het tokenendpoint gebruikt twee vormen van clientauthenticatie:
private_key_jwt bewijst op applicatieniveau bezit van de geregistreerde
signing key en bindt de assertion aan clientorganisatie en de
authorization-server-issuer.Het VWS/Twiin-conceptmemo van 13 juli 2026 kiest ervoor de organisatiehandtekening aan de sleutel van het geregistreerde organisatiecertificaat te verbinden. Ook dan hebben mTLS en de applicatiehandtekening een andere functie en worden zij afzonderlijk gecontroleerd. Het precieze landelijke certificaatprofiel en sleutelbeheer zijn nog niet vastgesteld.
De client assertion is een kortlevende, ondertekende JWT:
{
"iss": "2.16.528.1.1007.3.3.11111111",
"sub": "2.16.528.1.1007.3.3.11111111",
"aud": "https://as.example.org",
"iat": 1784275200,
"nbf": 1784275200,
"exp": 1784275320,
"jti": "unieke-assertionwaarde"
}
Profielregels:
iss en sub moeten beide de geregistreerde organisatie-identificatie van
het clientsysteem bevatten;aud moet volgens FAPI 2.0 exact de vertrouwde issuer identifier van de
authorization server zijn;iat en exp moeten aanwezig, actueel en onderling begrensd zijn; een
aanwezige nbf mag nog niet in de toekomst liggen;jti moet aanwezig, niet leeg en niet eerder gebruikt zijn;De authorization server moet veilig stoppen bij een onbekende organisatie, onjuiste key, afwijkende audience, ongeldige tijd of replay.
private_key_jwt is de naam van de clientauthenticatiemethode. De
requestparameter heeft de RFC 7523 jwt-bearer URN als waarde:
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion=[compact JWT]
Een letterlijke waarde private_key_jwt in client_assertion_type is in deze
uitwerking ongeldig.
Een geslaagde TLS-handshake toont dat het clientsysteem een private key bezit bij een certificaat onder een vertrouwde keten. De authorization server controleert daarnaast dat de geregistreerde certificaatstatus van de client actueel en aanvaardbaar is. Het clientsysteem voert dezelfde afzonderlijke statuscontrole uit voor het geregistreerde broncertificaat voordat het de bronhandtekening vertrouwt.
Open ontwerpkeuze: de productie-PKI, statusbron, actualiteit en omgang met een niet-beschikbare statusvoorziening moeten nog worden vastgesteld. Een onbekende of niet controleerbare status mag niet stilzwijgend als geldig worden behandeld.
Een assertion kan correct ondertekend maar toch oud of herhaald zijn. De
authorization server bewaart daarom gebruikte jti-waarden tot na het
geldigheidsvenster. Bij horizontale schaal moet deze replayregistratie worden
gedeeld tussen alle instanties die dezelfde client assertions accepteren.
Referentie-implementatie: ClientAssertionService gebruikt ES256, maakt
assertions met een levensduur van twee minuten, staat maximaal vijf minuten toe
en hanteert zestig seconden klokafwijking. Dit zijn concrete, veilige
demokeuzes; definitieve productiegrenzen vereisen profielgovernance.
Na geslaagde clientauthenticatie weet de authorization server welke geregistreerde organisatie het tokenverzoek doet. Zij moet daarna nog de gevraagde autorisatie en de tokenendpoint-DPoP-proof controleren voordat zij een access token uitgeeft.