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 EHR's FHIR endpoint en launch-code uit. |
2. Uitlezen smart-config | De aanbiedermodule MOET de waarde van In deze discovery verzamelt module het 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. De launch-parameter MOET door de module worden behandeld als een opaque string. De module mag pas na ontvangst van de token-respons bepalen hoe de launch-context moet worden geïnterpreteerd. |
3. Doorsturen gebruiker naar DVA voor autorisatie-flow | Module stuurt gebruiker door naar het Afhankelijk van de context waar de gebruiker in opereert hebben we 2 scenario’s. Afhankelijkheid van scenario-keuzeWelke vorm van launch-context wordt gebruikt, wordt bepaald door de DVA/zorgaanbieder. Een SMART launch kent daarom twee mogelijke scenario’s waar een module mee moet kunnen omgaan: Scenario 1 — Module voert alleen een taak uit (geen gebruikersprofiel nodig) (door de DVA gekozen wanneer de module geen kennis van de gebruiker hoeft te hebben) In dit scenario geeft de DVA alleen taakgerelateerde informatie terug. De module hoeft de gebruiker niet te identificeren en vraagt daarom geen openid / fhirUser. De module gebruikt uitsluitend de taak-ID en vereist alleen de resource-scopes die nodig zijn om de taak te lezen en te voltooien. In het verzoek op
Effect:
Scenario 2 — Module heeft gebruikersidentiteit nodig (bijv. eigen profiel, personalisatie, logging) (bijv. modules die willen weten wíe de gebruiker is, of wanneer resultaten gekoppeld worden aan een gebruikersaccount in de module) In dit scenario heeft de module een referentie naar de gebruiker nodig binnen FHIR, bijvoorbeeld:
Dit gebeurt via de scope
Aanvullende uitwerking volgt. In gesprek met ontwikkel- |
4. Verifiëren toestemming | DVA valideert de launch-code 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 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 doet een Token response bevat altijd - ongeacht welk scenario van stap 3- de launch_context met deze velden in JSON:
Aanvullend bij scenario 1:
Aanvullend bij scenario 2:
Na ontvangst van de token-respons MOET de aanbiedermodule controleren dat de waarde van
Let op:
|
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. Zie 3.7: Wijzigen taakstatus. |
Procesdiagram
Procesdialoog
2. Uitlezen discoverydocument .well-known/smart-configuration
HTTP/1.1 200 OK
Content-Type: application/json
{
"authorization_endpoint": "https://dvauth.example.org/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.example.org/connect/introspect",
"issuer": "https://dvauth.example.org",
"jwks_uri": "https://dvauth.example.org/.well-known/openid-configuration/jwks",
"response_types_supported": [
"code"
],
"revocation_endpoint": "https://dvauth.example.org/connect/revocation",
"scopes_supported": [
"openid",
"profile",
"launch",
"patient/*.read"
],
"token_endpoint": "https://dvauth.example.org/connect/token",
"token_endpoint_auth_methods_supported": [
"client_secret_basic",
"client_secret_post"
]
}
3.Doorsturen gebruiker naar DVA met launch-code voor autorisation code flow
HTTP 302 REDIRECT
https://dvauth.example.org/connect/authorize?
launch=9c22a827e63e4139bcf3a03d7e787d71&
response_type=code&
client_id=module_client_id&
redirect_uri=https://module_redirect_uri.example.or&
state=module_state&
scope=launch+fhirUser+patient/*.read%20patient/Task.*&
aud=https://dva.example.org/fhir
5. Uitwisselen auth-code
HTTP 302 REDIRECT
https://module_redirect_uri.example.org?code=SplxlOBeZQQYbYS6WxSbIA&state=module_state
6. Uitwisselen launch-context
POST https://dvauth.example.org/connect/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=SplxlOBeZQQYbYS6WxSbIA&
redirect_uri=https://module_redirect_uri.example.org&
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",
"resource": "Task/350755BC-E573-4004-91A3-91321E4BCA2A",
"intent": "startmodule",
"return_url": "https://pgo.example.org/launch_callback"
...
}
Bespreken: Ondersteunen van grant_types-support op refresh_token optioneel?
