Skip to main content
Skip table of contents

3.6 Ontvangen launch-context

Aanbiedermodule ontvangt zorggebruiker met een launch-code en wisselt deze in voor een launch-context. Met deze informatie (taak, patient) opent aanbiedermodule de digitale activiteit.

Processtappen

De stappen in het uitlezen van launch-context volgen HL7 SMART App Launch.

Processtap

Toelichting

1. Ontvangen gebruiker

Aanbiedermodule ontvangt de gebruiker met een browserverzoek op de launch-url. De module leest de issuer en launch-code uit.

https://aanbiedermodule-launch-url?iss=dva&launch=launch-code

2. Uitlezen smart-config

Aanbiedermodule leest .well-known/smart-configuration van issuer. In deze discovery verzamelt module het authorization_endpoint en token_endpoint van DVA voor de OIDC-authorization code flow en token request op 3.6 Ontvangen launch-context | 6.-Uitwisselen-launch-context .

Na het bepalen van de endpoints begint module een SMART on FHIR authorization code flow met gebruikersidentificatie bij issuer (DVA). De volgende processtappen lichten dit toe.

3. Doorsturen gebruiker naar DVA voor autorisatie-flow

Module stuurt gebruiker door naar het authorization_endpoint. In het verzoek op /authorize vraagt module om toegang tot scopes:

  • scope launch: de launch-code die verwijst naar launch-context.

  • scope fhirUser: vereist om de gebruikersidentiteit als referentie naar FHIR-resource te ontvangen (Patient/XXX_Patient).

  • resource scopes als patient/*.read en patient/Task.* voor toegang tot resources zoals bijvoorbeeld FHIR Patient en Task.

  • niet scopes: openid, profile

Specifiek vraagt module niet om scopes openid en profile. Hoewel SMART on FHIR specifieert langs OpenID Connect, is MedMij DVA een OAuth 2.0-provider. Deze geeft deze geen id_token uit zoals OIDC-identityproviders. De DVA’s ondersteunen doorgaans geen userinfo_endpoint (verplicht in OIDC, niet in OAuth).

Aanvullende uitwerking volgt. In gesprek met ontwikkel-
partners bepalen we of de scopes optioneel worden.

4. Verifiëren toestemming

DVA valideert de launch-code (ook wel launch_token) na ontvangst van het verzoek op authorization-endpoint. DVA gaf de launch-code in 3.4 Aanvragen launch-code af en correleert dit met het originele access_token en de launch_context.

DVA verifieert of gebruikerstoestemming is gegeven op het starten en uitwisselen met module. Als nodig start DVA gebruikersidentificatie langs DigiD en toestemmingsverklaring voor gegevensdeling met specifieke module.

5. Uitwisselen auth-code

Na succesvolle identificatie en toestemming volgt een redirect van gebruiker naar module met de authorization code. Bij voortijdig afbreken of fouten in de aanvraag volgt een error-respons als beschreven in RFC 6749 OAuth 2.0 Error Response.

6. Uitwisselen launch-context

Omwisselen van code voor context gebeurt met een OIDC Token Request bij de opgegeven issuer. De issuer (DVA) en aanbieder-
module vertrouwen elkaar en passen beveiligingseisen toe die passen bij de verwerkingsverantwoordelijkheid van zorgaanbieder.

Module doet een /token-verzoek op het token_endpoint met de authorization code. Module authenticeert zich via client credentials of JWT-token, DVA genereert een access_token voor FHIR-toegang.

Token response bevat de launch_context met deze velden in JSON:

  • access_token: voor toegang tot FHIR-resources binnen scopes.

  • token_type: vaste waarde, “Bearer”.

  • expires_in: geldigheidsduur van het token.

  • patient: FHIR Patient.Id uit de launch-context.

  • fhirUser: FHIR-referentie naar de gebruiker, doorgaans gelijk aan patient (Patient/XXX_Patient), mogelijk ook zorgverlener (out-of-scope, bijvoorbeeld Practitioner/XXX_Zorgverlener).

  • Andere contextparameters, zoals encounter als van toepassing.

  • niet: id_token: MedMij DVA is doorgaans geen OIDC-provider, wel een SMART on FHIR-authorisatieserver. (DVA is er uiteraard wel vrij in een id_token door te geven als zij authenticatie doen.)

7. Starten module

Aanbiedermodule gebruikt de launch-context om applicatie op te zetten voor de bezoekende gebruiker. Aanbiedermodule kan de verwijzingen naar taak gebruiken om met zorgaanbieder meer gegevens uit te wisselen en resultaten te bewaren.

Bij een module met vragenlijst kan bijvoorbeeld een voornaam getoond, tussentijds resultaten bewaard en een gereedmelding opgeslagen bij zorgaanbieder.

8. Bijwerken taak

Aanbiedermodule wijzigt taakstatus bij zorgaanbieder.
Gebruiker verzamelt in PGO de status van aanbiedertaken bij DVA.

Taakstatusopties uitwerken in FHIR-profiel na overleg met ontwikkelpartners.

Procesdiagram

3.3.4-starten_aanbiedermodule.png

Procesdialoog

JSON
2. Uitlezen discoverydocument .well-known/smart-configuration

HTTP/1.1 200 OK
Content-Type: application/json

{
  "authorization_endpoint": "https://dvauth/connect/authorize",
  "capabilities": [
    "launch-ehr",
    "client-public",
    "sso-openid-connect",
    "context-ehr-patient",
    "permission-patient"
  ],
  "code_challenge_methods_supported": ["S256"],
  "grant_types_supported": ["authorization_code", "refresh_token"],
  "introspection_endpoint": "https://dvauth/connect/introspect",
  "issuer": "https://dvauth",
  "jwks_uri": "https://dvauth/.well-known/openid-configuration/jwks",
  "response_types_supported": [
    "code"
  ],
  "revocation_endpoint": "https://dvauth/connect/revocation",
  "scopes_supported": [
    "openid",
    "profile",
    "launch",
    "patient/*.read"
  ],
  "token_endpoint": "https://dvauth/connect/token",
  "token_endpoint_auth_methods_supported": [
    "client_secret_basic",
    "client_secret_post"
  ]
}
CSS
3.Doorsturen gebruiker naar DVA met launch-code voor autorisation code flow

HTTP 302 REDIRECT

https://dvauth/connect/authorize?
  launch=9c22a827e63e4139bcf3a03d7e787d71&
  response_type=code&
  client_id=module_client_id&
  redirect_uri=https://module_redirect_uri&  
  state=module_state&
  scope=launch+fhirUser+patient/*.read%20patient/Task.*&
  aud=https://dva/fhir

CSS
5. Uitwisselen auth-code

HTTP 302 REDIRECT
https://module_redirect_uri?code=SplxlOBeZQQYbYS6WxSbIA&state=module_state
JSON
6. Uitwisselen launch-context

POST https://dvauth/connect/token
Content-Type: application/x-www-form-urlencoded
  grant_type=authorization_code&
  code=SplxlOBeZQQYbYS6WxSbIA&
  redirect_uri=https://module_redirect_uri&
  client_id=module_client_id&
  client_secret=module_client_secret

HTTP 200 OK
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6...",
  "token_type": "Bearer",
  "expires_in": 500,
  "scope": "launch fhirUser patient/*.read patient/Task.*",
  "patient": "Patient/XXX_Patient",
  "fhirUser": "Patient/XXX_Patient",
  ...
}

Bespreken: Ondersteunen van grant_types-support op refresh_token optioneel?

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.