Option 2a - PGO als SMART on FHIR Resource Service
Koppelmij Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
Option 2a - PGO als SMART on FHIR Resource Service
Optie 2: PGO als SMART on FHIR Resource Service met Token Exchange
Het probleem wat we oplossen is het feit dat in het launch proces de browser geauthenticeerd moet worden. Indien we dit niet doen, is het stelen van de launch request (POST of GET) een onacceptabel risico.
In deze optie fungeert het PGO als een SMART on FHIR resource service en gebruikt de bestaande PGO login sessie voor browser authenticatie. De module doorloopt een standaard SMART on FHIR app launch flow met het PGO, waarbij de PGO sessie wordt gevalideerd in de /authorize stap. Voor resource toegang gebruikt het PGO Token Exchange (RFC 8693) om namens de module een delegation token op te halen bij de DVA, waarbij de module zich authenticeert via RFC 7523 en dit token als actor_token wordt meegegeven.
Deze optie beschrijft een architectuur waarbij het PGO een dual-role vervult: enerzijds als SMART on FHIR authorization server voor de module, anderzijds als client voor de DVA. De browser authenticatie vindt plaats via de PGO sessie, en resource toegang wordt gefaciliteerd door Token Exchange. Op hoog niveau:
Het PGO doet het verzamelen en krijgt een access_token van de DVA
Het PGO fungeert als SMART on FHIR authorization server voor modules
De module start een SMART on FHIR flow met het PGO als authorization server
Browser authenticatie gebeurt via de bestaande PGO sessie in de /authorize stap
Module authenticeert zich via RFC 7523 (JWT Bearer assertion) in de /token stap
PGO doet Token Exchange met DVA tijdens de /token stap
Module krijgt access_token van PGO en kan direct DVA resources benaderen
Voordelen van deze PGO Authorization Server aanpak:
Hergebruik van PGO sessie: Geen extra authenticatie stappen nodig voor browser
Standaard SMART on FHIR: Module gebruikt bekende SMART launch flow
Delegation model: PGO handelt namens module met expliciete actor context
RFC compliance: Gebruikt RFC 8693 (Token Exchange) en RFC 7523 (JWT Bearer)
Veiligheid: Browser authenticatie via vertrouwde PGO omgeving
DPoP ondersteuning: Verplichte sender-constrained tokens via RFC 9449
Directe toegang: Module communiceert direct met DVA FHIR service
Hoofdstappen van het proces
1. Initiële PGO login
De gebruiker logt in bij zijn Persoonlijke Gezondheidsomgeving (PGO)
PGO maakt een sessie-status aan en bindt deze aan de PGO-sessie
PGO configureert zich als SMART on FHIR authorization server
Dit vormt het startpunt voor toegang tot digitale interventies
2. Verzamelen van gegevens
PGO vraagt DVA (Dienstverlener Aanbieder) om gegevens te verzamelen
DVA laat gebruiker inloggen via DigID voor authenticatie
Na succesvolle authenticatie krijgt DVA toegang en geeft een access_token terug aan PGO
PGO gebruikt dit token om FHIR-taken op te halen van DVA
PGO slaat DVA access_token op voor latere Token Exchange operaties
Opmerking: Dit is een OIDC (OpenID Connect) flow tussen PGO en DVA
3. Module launch naar PGO
Gebruiker klikt op "start module" in PGO
PGO genereert eigen launch token en stuurt gebruiker door naar modulePGO doet 302 redirect naar module met launch parameter:
GET {MODULE_URL}/launch?launch={launch_token}&iss={PGO_FHIR_BASE_URL}
4. SMART on FHIR Authorization Flow
4a. /authorize stap (front-channel):
Module redirects browser naar PGO /authorize endpoint met launch parameter
GET {PGO_URL}/authorize?response_type=code&client_id={module_id}&redirect_uri={module_redirect}&launch={launch_token}&state={module_state}
PGO valideert bestaande browser sessie (geen nieuwe login nodig)
PGO correleert launch_token met PGO sessie
Na validatie: redirect naar module met authorization code
4b. /token stap (back-channel):
Module doet /token request naar PGO met authorization code
Module authenticeert zich via RFC 7523 JWT Bearer assertion met verplichte cnf claim voor DPoP
PGO voert tegelijkertijd Token Exchange uit met DVA:
DVA extraheert cnf claim uit actor_token JWT voor DPoP key binding
DVA genereert DPoP delegation token met module als actor context
PGO geeft module een DPoP access_token (gebaseerd op delegation token) en DVA FHIR endpoint informatie
5. Module functioneren
Module gebruikt DPoP access_token voor directe FHIR requests naar DVAModule communiceert rechtstreeks met DVA FHIR serviceBrowser blijft geauthenticeerd via originele PGO sessieModule moet DPoP proof meesturen bij elk direct DVA API request
Module kan functioneren met DVA resources via directe DVA interactie