Skip to main content
Skip table of contents

Use Cases Autorisatie Server ZA

Overzicht Autorisatie Server ZA

Onderstaande figuur toont een overzicht van de interfaces, services en functies van de Autorisatie Server ZA.

image-20240213-094518.png

De services zijn toegankelijk via een geboden interface en worden beschreven in de vorm van use cases. Een service wordt altijd vervult middels één of meerdere applicatiefuncties, bijvoorbeeld "AORTA Autorisatie Server".

UC: Uitgeven AORTA access_token

Primaire actor

Resource Client (xIS), Resource Broker v3-in, Autorisatie Server GTK

Systeem

AORTA Autorisatie Server

Secundaire actor

Resource Broker APR, MAP Server, SDS Server, Adressering Server

Code

AOF.UC.ASZA.100.v8

Realiseert Feature

AORTA Token Exchange, GetTokenRequest

Pre-condities

De primaire actor is aangesloten op het systeem.

Het systeem is slechts benaderbaar voor

  • GBx-applicaties die zijn aangesloten op het AORTA netwerk, OF

  • componenten van VZVZ die zijn aangesloten via een intern netwerk of op het AORTA netwerk

Triggers

  • De primaire actor stuurt een token exchange request in.

  • Het systeem beschikt over up-to-date gegevens betreffende de ondersteunde interacties.

Main flow

Stap

Omschrijving

Uitkomst

1

Het systeem ontvangt een verzoek en start de verwerking.

2

Het systeem controleert of het ontvangen request voldoet aan de AORTA interface specificaties.

Ongeldig verzoek

statuscode 400 Bad Request, error=invalid_request

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

3

Indien deze use case wordt doorlopen voor Feature AORTA Token Exchange, dan controleert het systeem, indien niet kan worden gegarandeerd dat dit al is gedaan door de primaire actor, de geldigheid van de meegezonden, van toepassing zijnde, tokens:

Ongeldig verzoek

statuscode 400 Bad Request, error=invalid_request

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

4

Indien geen scope parameter is ontvangen, maar wel een AORTA consent_token, dan bepaalt het systeem, m.b.v. Feature getInteractionContexts (SDS), o.b.v. de contextcode uit het consent_token, voor welke FHIR interactie(s) een AORTA access_token wordt gevraagd.

NB. omdat de scope van een consent_token vooralsnog altijd betrekking heeft op één of meerdere pull interacties, gericht aan een GBx-applicatie, en die moeten worden uitgevoerd op betrouwbaarheidsniveau Midden of hoger, kan ervan worden uitgegaan dat deze scope is opgenomen in de SDS.

Géén interactie(s) gevonden

statuscode 400 Bad Request, error=invalid_request

5

Indien de ontvangen scope parameter geen interacties bevat, maar wel een contextcode, dan bepaalt het systeem, m.b.v. Feature getInteractionContexts (SDS), o.b.v. de contextcode uit de scope parameter, voor welke FHIR interactie(s) een AORTA access_token wordt gevraagd.

Géén interactie(s) gevonden

statuscode 400 Bad Request, error=invalid_request

6

Het systeem controleert, m.b.v. Feature hasConformance (APR), of de Resource Client (GBx-applicatie) beschikt over de conformances en systeemrollen, die zijn vereist voor de beoogde interactie(s), en voor de meegezonden tokens.

Deze stap wordt niet uitgevoerd, indien de rol van Resource Client wordt vervuld door Resource Broker GTK.

Client niet gekwalificeerd voor één of meerdere interactie(s)

statuscode 403 Forbidden, error=access_denied, error_description="Initiërende applicatie beschikt niet over de vereiste capabilities."

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

7

Het systeem bepaalt, m.b.v. Feature checkRequest (MAP), welk van de gevraagde interacties, gegeven het gehanteerde betrouwbaarheidsniveau, zijn toegestaan conform het Medisch Autorisatie Protocol.

NB. deze stap is NIET van toepassing indien de scope parameter aangeeft dat het gaat om een request t.b.v. Mitz.

Géén van de interacties is toegestaan

statuscode 403, error=access_denied

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

8

Indien de beoogde interactie operation $get-aorta-data of een generieke v3-query betreft, dan genereert het systeem het vereiste AORTA access_token, en gaat het direct verder naar de exit stap van de flow.

Access_tokens mogen niet door het systeem worden opgeslagen.

9

Het systeem bepaalt, voor interacties die in de AORTA interactietabel zijn gemarkeerd als een pull-interactie, en die niet zijn gericht aan een VZVZ component of aan een externe component/dienst (bijv. Mitz), m.b.v. Feature getInteractionContexts (SDS), welke inperkende zoekparameters eventueel moeten worden opgenomen in de scope van het uit te geven AORTA access_token. Inperkende zoekparameters afkomstig uit de SDS worden slechts opgenomen in de scope van het access_token wanneer ze als niet-overridable zijn aangemerkt.

Voor interacties die zijn gemarkeerd als een push-interactie bepaalt het systeem, a.d.h.v. de AORTA interactietabel (classifier attribuut), of er inperkende attributen zijn die moeten worden opgenomen in de scope van het access_token. NB. classifier attributen voor pull-interacties zijn (naast in de interactietabel ook) als niet-overridable attributen opgenomen in de SDS, en hoeven daarom niet uit de interactietabel te worden gehaald.

NB. alle pull-interacties en bijbehorende contextcodes horen altijd opgenomen te zijn in de SDS, omdat het uitgangspunt is dat een specifieke opvraag in combinatie met een bepaalde contextcode ook moet kunnen worden getriggered middels een $get-aorta-data of generieke query met deze contextcode.

Voor interacties van het type transaction/batch is het in deze stap noodzakelijk om te kijken naar de individuele interacties die deel uitmaken van de transaction/batch.

Combinatie van operation, contextcode en rolcode niet gevonden

statuscode 400 Bad Request, error=invalid_request

Classifier in interactietabel heeft andere waarde in SDS

statuscode 500

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

10

Indien de destination van het request een appID OF een appID + een URA bevat:

Het systeem bepaalt m.b.v. Feature getRoutingInfo (Adressering Server), welke interactie(s) door de betreffende bestemming kunnen worden ontvangen.

Indien een URA en een appID worden meegegeven, en het appID behoort tot een GBZ-applicatie in AORTA (en dus niet tot Resource Broker GTK), dan vraagt het systeem slechts slechts Routing Info voor dit specifieke appID. Wanneer het appID behoort tot Resource Broker GTK, dan vraagt het systeem juist Routing Info voor de meegegeven URA.

Indien slechts een URA werd meegegeven dan wordt deze stap dus niet uitgevoerd, omdat in dat geval routingInfo zal worden gevraagd in een latere fase tijdens de token expansion.

Voor interacties van het type transaction/batch wordt in deze stap NIET gekeken naar de individuele interacties die deel uitmaken van de transaction/batch.

Géén appID gevonden

statuscode 403, error=access_denied, error_description="Ontvangende applicatie beschikt niet over de vereiste capabilities."

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

11

Indien de destination in het request een AORTA GBZ betreft (appID en/of URA), en blijkens de scope in het request gegevens worden opgevraagd, dan toetst het systeem of de betreffende patiënt toestemming heeft gegeven voor de gevraagde scope van autorisatie, zoals beschreven in "Toelichting controle toestemming patiënt".

Voor interacties van het type transaction/batch is het in deze stap noodzakelijk om te kijken naar de individuele interacties die deel uitmaken van de transaction/batch.

Indien de destination een URA bevat + het appID van RB GTK, dan wordt deze stap niet uitgevoerd, omdat toestemming dan moet worden getoetst in het externe GTK.

Géén van de interacties is toegestaan

statuscode 403, error=access_denied

Fout bij bepalen status van toestemming

statuscode 500

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

12

Indien het request een interactie betreft m.b.t. een AuditEvent, en blijkens de destination van het request is bestemd voor de resource broker zelf (rb_log), dan voert het systeem de controles uit, zoals beschreven in "specifieke autorisatieregels RB-logging". Eventuele inperkingen die van toepassing zijn worden uitgedrukt in de scope van het uit te geven AORTA access_token.

Géén van de interacties is toegestaan

statuscode 403, error=access_denied

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

13

Indien het request een interactie betreft die deel uitmaakt van de Actualiteitsregister Interface, en blijkens de destination van het request is bestemd voor de resource broker zelf (rb_vwi), dan voert het systeem de controles uit, zoals beschreven in "specifieke autorisatieregels ACT/VWI". Eventuele inperkingen die van toepassing zijn worden uitgedrukt in de scope van het uit te geven AORTA access_token.

Géén van de interacties is toegestaan

statuscode 403, error=access_denied

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

14

Indien het request een interactie betreft m.b.t. een Subscription, en blijkens de destination van het request is bestemd voor het Abonnementenregister (rb_abr), dan voert het systeem de controles uit, zoals beschreven in "specifieke autorisatieregels Abonnementenregister". Eventuele inperkingen die van toepassing zijn worden uitgedrukt in de scope van het uit te geven AORTA access_token.

Géén van de interacties is toegestaan

statuscode 403, error=access_denied

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

15

Indien het request een interactie betreft m.b.t. een Mitz toestemmingsregistratie, dan verkrijgt het systeem een Mitz access_token, op de wijze zoals beschreven in het Mitz afsprakenstelsel (Implementatiehandleiding ZNP).

Geen access_token verkregen

statuscode 500

16

Het systeem genereert het vereiste AORTA access_token, conform de hoogste versie die wordt ondersteund door de audience. Access_tokens mogen niet door het systeem worden opgeslagen. Voor de vulling van de scope van het access_token wordt gebruik gemaakt van classificerende attributen, zoals benoemd in de AORTA interactietabel, en indien van toepassing ook van te hanteren zoekparameters die zijn verkregen uit de SDS. Zie ook de “Toelichting vulling smart-on-fhir scope en _vrb_ter_scope in het AORTA access_token”.

Voor interacties van het type transaction/batch is het in deze stap noodzakelijk om te kijken naar de individuele interacties die deel uitmaken van de transaction/batch.

17

<exit>

Het systeem retourneert een response naar de primaire actor.

Post-condities

Het systeem heeft het verzoek op de juiste wijze verwerkt en heeft een daarbij passende response geretourneerd.

Het systeem heeft van het ontvangen request, de volgende attributen gelogd:

  • datum en tijd van ontvangst

  • request-id

  • initial-request-id

  • sender-id

    • role-id wanneer de sender van het request een VZVZ component is, en de aanroep niet via TLS geschiedt

    • common name wanneer de aanroep via TLS geschiedt

==

Het systeem heeft voor ieder uitgaand request, dat bij het doorlopen van de use case werd verzonden, de volgende attributen gelogd:

  • datum en tijd van verzending

  • request-id

  • initial-request-id

  • receiver-id

    • role-id wanneer de receiver van het request een VZVZ component is, en de aanroep niet via HTTP geschiedt

    • FQDN wanneer de aanroep via HTTP geschiedt

Aanvullend daarop heeft het systeem van het ontvangen request de volgende attributen gelogd:

  • request.grant_type

  • request.client_id

  • request.audience

  • request.requested_token_type

  • request.subject_token_type

  • ID van het subject_token

  • request.actor_token_type

  • ID van het actor_token

  • request.registration_token_type

  • ID van het registration_token

  • request.consent_token_type

  • ID van het consent_token

  • request.scope

Het systeem heeft van de geretourneerde response, de volgende attributen gelogd:

  • datum en tijd van response

  • request-id van het bijbehorende request

  • initial-request-id van het bijbehorende request

  • receiver-id

    • role-id wanneer de receiver van de response een VZVZ component is, en de aanroep niet via TLS geschiedt

    • common name wanneer de aanroep via TLS geschiedt

  • HTTP statuscode en eventueel geretourneerde foutinformatie

==

Het systeem heeft voor iedere response, die bij het doorlopen van de use case werd ontvangen, de volgende attributen gelogd:

  • datum en tijd van response

  • request-id van het bijbehorende request

  • initial-request-id van het bijbehorende request

  • sender-id

    • role-id wanneer de sender van de response een VZVZ component is, en de aanroep niet via TLS geschiedt

    • common name wanneer de aanroep via TLS geschiedt

  • HTTP statuscode en eventueel geretourneerde foutinformatie

Aanvullend daarop heeft het systeem van de geretourneerde response de volgende attributen gelogd:

  • response.issued_token_type 

  • response.token_type 

  • response.expires_in

  • response.scope

  • jti van het uitgeven AORTA access_token

  • ver van het uitgeven AORTA access_token

Toelichting vulling smart-on-fhir scope en _vrb_ter_scope in het AORTA access_token

Wanneer een interactie, blijkens het MAP is toegestaan, dan wordt de vulling van de scope van een AORTA access_tokens primair bepaald door de inhoud van de AORTA interactietabel. De scope kan, bij pull interacties, eventueel verder worden ingeperkt o.b.v. de geldende SDS configuratie.

Bij batches en transactions wordt gekeken naar de interacties in de interactietabel, die deel uit kunnen maken van de betreffende batch- of transaction type interactie (dit wordt aangegeven met een parentId attribuut in de interactietabel).

==

Wanneer een AORTA access_token wordt gevraagd t.b.v. een HL7v3-interactie, dan wordt de informatie gebruikt voor het FHIR-equivalent van de betreffende v3-interactie. Dit geldt ook wanneer door Resource Broker v3-in een access_token wordt gevraagd voor de afhandeling een generieke v3-query. Informatie over equivalents is opgenomen in de interactietabel. Wanneer voor een HL7v3-interactie meerdere FHIR-equivalents voorkomen in de interactietabel, dan wordt gekozen voor de FHIR-equivalent die blijkens het “preference” attribuut in de interactietabel de voorkeur heeft.

==

De _vrb_ter_scope van het AORTA access_token wordt altijd gevuld o.b.v een interactie die geldt voordat een eventuele transformatie naar een andere interactie wordt uitgevoerd, en wordt altijd gevuld conform het AORTA interactie-id formaat.

De scope van het AORTA access_token wordt altijd gevuld met een smart-on-fhir scope die hoort bij de interactie, nadat een eventuele (v3-FHIR, FHIR-v3, v3-v3 of FHIR-FHIR) transformatie is uitgevoerd. Ofwel, zoals de uiteindelijke Resource Server de interactie gaat ontvangen. De scope bevat geen dubbele, redundante onderdelen (bijv. meerdere keren “patient/Organization.r”).

Het scope attribuut in de getTokenResponse wordt altijd gevuld in hetzelfde formaat als waarin het werd ontvangen in de bijbehorende getTokenRequest. Wanneer géén scope attribuut werd ontvangen, dan wordt in de response het smart-on-fhir formaat gehanteerd. De scope in de response is bedoeld voor de Resource Client, en hoort altijd bij de interactie die geldt voordat een eventuele transformatie wordt uitgevoerd.

==

Voorbeeld van een FHIR pull interactie:

  • Gewenste scope blijkens het token exchange request is “search:zib-AdministrationAgreement:2~aorta.contextcode.MEDGEG~normaal”

    • NB. een andere situatie is dat een token conversie wordt gedaan t.b.v. $get-aorta-data, en uit de SDS terugkomt dat een “search:zib-AdministrationAgreement:2” moet worden uitgevoerd

  • Uit de interactietabel blijkt dat het gaat om

    • Interactietype “search”

    • FHIR resourcetype “MedicationDispense“

    • Classificerende attributen “category=http://snomed.info/sct|422037009“

    • scopeExtension “Medication.r“

  • Uit de SDS configuratie blijkt ook dat de betreffende opvrager, binnen de gewenste contextcode, deze classificerende attributen dient te hanteren

  • De scope van het AORTA access_token wordt dan gevuld met “patient/MedicationDispense.s?category=http://snomed.info/sct|422037009 patient/Medication.r aorta.contextcode.MEDGEG”

  • De _vrb_ter_scope van het AORTA access_token wordt dan gevuld met “search:zib-AdministrationAgreement:2~aorta.contextcode.MEDGEG~normaal“, waarbij zo nodig "/<transformation-id>" wordt toegevoegd achter het interaction-id

    • NB. de read interactie uit de scopeExtension wordt dus niet opgenomen in de _vrb_ter_scope, maar wel in de scope, zodat deze via een _include bij de search op de primaire resource kan worden meegenomen

Voorbeeld van een v3 pull interactie (komst slechts voor bij de verwerking van een generieke v3-query):

  • Bij een token conversie die wordt gedaan voor de generieke v3 query blijkt uit de SDS (gehanteerde contextcode is MEDGEG) dat de volgende interacties moeten worden uitgevoerd

    • QUTA_IN991211NL02

    • QUVV_IN992201NL03

    • search:mp-AdministrationAgreement:1

    • search:mp-DispenseRequest:1

  • Uit de interactietabel blijkt dat de volgende interacties functioneel gelijk zijn aan elkaar (zelfde groupId)

    • QUTA_IN991211NL02, search:mp-AdministrationAgreement:1 (preference=1) en search:zib-AdministrationAgreement:2 (preference=2)

    • QUVV_IN992201NL03 en search:mp-DispenseRequest:1

  • Uit de interactietabel blijkt dat moet worden gewerkt met de volgende FHIR equivalents

    • search:mp-AdministrationAgreement:1

      • Interactietype “search”

      • FHIR resourcetype “MedicationDispense“

      • Classificerende attributen “category=http://snomed.info/sct|422037009”

      • scopeExtension “Medication.r, Patient.r“

    • search:mp-DispenseRequest:1

      • Interactietype “search”

      • FHIR resourcetype “MedicationRequest“

      • Classificerende attributen “category=http://snomed.info/sct|52711000146108“

      • scopeExtension “Medication.r, Patient.r“

  • Uit de SDS configuratie blijkt ook dat de betreffende opvrager, binnen de gewenste contextcode, deze classificerende attributen dient te hanteren

  • De scope van het AORTA access_token wordt dan gevuld met “patient/MedicationDispense.s?category=http://snomed.info/sct|422037009 patient/MedicationRequest.s?category=http://snomed.info/sct|52711000146108 patient/Medication.r patient/Patient.r aorta.contextcode.MEDGEG”

  • De _vrb_ter_scope van het AORTA access_token wordt dan gevuld met “QUTA_IN991211NL02 QUVV_IN992201NL03~aorta.contextcode.MEDGEG~normaal“, waarbij zo nodig (wanneer de Adressering Server dit aangeeft) "/<transformation-id>" wordt toegevoegd achter het interaction-id

    • NB. de read interactie uit de scopeExtension wordt dus niet opgenomen in de _vrb_ter_scope, maar wel in de scope, zodat deze via een _include bij de search op de primaire resource kan worden meegenomen

    • NB. wanneer in deze situatie de Adressering Server zou aangeven dat één van beide interacties getransformeerd dient te worden, dan zou de scope gelijk blijven, maar zou de _vrb_ter_scope aangeven welke transformatie moet worden uitgevoerd, en bijv. als volgt worden gevuld “QUTA_IN991211NL02/3.5 QUVV_IN992201NL03~aorta.contextcode.MEDGEG~normaal“

Voorbeeld van een FHIR push interactie:

  • Gewenste scope blijkens het token exchange request is “transaction:mp-MedicationPrescription-Bundle:1~aorta.contextcode.MEDPRESC~normaal”

  • Uit de interactietabel blijkt dat het gaat om

    • Interactietype “transaction”

    • Direction “push” (de SDS speelt derhalve geen rol bij deze interactie)

  • Uit de interactietabel blijk (via de parentId) dat de volgende interacties deel uitmaken van de betreffende transaction (voorbeeld is niet compleet)

    • create:mp-AdministrationAgreement:1

    • create:zib-BodyHeight:2

  • De scope van het AORTA access_token wordt dan gevuld met “patient/MedicationDispense.c?category=http://snomed.info/sct|422037009 patient/Observation.c?code=http://loinc.org|8302-2 aorta.contextcode.MEDPRESC”

  • De _vrb_ter_scope van het AORTA access_token wordt dan gevuld met “transaction:mp-MedicationPrescription-Bundle:1~aorta.contextcode.MEDPRESC~normaal“, waarbij zo nodig "/<transformation-id>" wordt toegevoegd achter het interaction-id

UC: Converteren AORTA access_token

Primaire actor

Resource Broker VnC

Systeem

AORTA Autorisatie Server

Secundaire actor

SDS Server, Lokalisatie Server, Adressering Server

Code

AOF.UC.ASZA.200.v5

Realiseert Feature

AORTA Token Expansion

Pre-condities

De primaire actor is aangesloten op het systeem.

Triggers

  • De primaire actor stuurt een token request in

Main flow

Stap

Omschrijving

Uitkomst

1

Het systeem ontvangt een verzoek en start de verwerking.

2

Het systeem controleert of het ontvangen request voldoet aan de AORTA interface specificaties.

Ongeldig verzoek

statuscode 400 Bad Request, error=invalid_request

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

3

Het systeem controleert de geldigheid van het meegezonden AORTA access_token, zoals omschreven in de sectie "Toetsing AORTA access_token".

4

Indien de beoogde interactie $get-aorta-data of een generieke v3-query betreft:

Het systeem bepaalt, m.b.v. de Selectie en Determinatie Interface welke interacties dienen te worden geïnitieerd (zie ook de toelichting “Gebruik van de SDS bij het bepalen van de interacties”).

De beoogde interactie is opgenomen in de scope van het ontvangen AORTA access_token.

Combinatie van operation, contextcode en rolcode niet gevonden

statuscode 400 Bad Request, error=invalid_request

Classifier in interactietabel heeft andere waarde in SDS

statuscode 500

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

5

Indien het ontvangen token request één of meerdere FHIR-search interacties betreft (dit kan worden afgeleid van de scope en _vrb_ter_scope van het ingestuurde access_token), en de audience van het access_token slechts een URA bevat:

Het systeem hanteert de scope en de _vrb_ter_scope van het ontvangen AORTA access_token voor de vulling van uit te geven AORTA access_tokens. Eventueel vereiste inperkingen zijn hier al in aangebracht tijdens de token exchange.

6

Indien de beoogde interactie $get-aorta-data of een generieke v3-query betreft:

Het systeem bepaalt, voor iedere te initiëren interactie waarvan het protocol gelijk is aan het protocol van de interactie in de scope van het token request, m.b.v. feature getSourceInfo, welke GBZ-applicaties beschikken over gegevens die bij de betreffende interactie dienen te worden opgeleverd.

Wanneer getSourceInfo wordt uitgevoerd voor een specifieke source (URA of appID’s), dan kan het gebeuren dat de response geen dataCategories bevat. Dit heeft slechts gevolgen voor de attest claim van het uit te geven access_token, omdat geen toestemming kon worden vastgesteld. De betreffende appID('s) worden wel gewoon meegenomen in de volgende stap.

Wanneer getSourceInfo wordt uitgevoerd zonder een specifieke source mee te geven, dan zal de response ook voor iedere appID één of meerdere dataCategories bevatten.

Het appID van de Resource Client is opgenomen in de _vrb_client_id claim van het ontvangen AORTA access_token.

Doelsystemen kunnen niet worden bepaald

statuscode 500

Géén geschikt doelsysteem gevonden

statuscode 400, error=invalid_target

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

7

Het systeem bepaalt, voor alle GBZ-applicaties die een interactie moeten ontvangen, danwel voor de gehele URA, m.b.v. Feature getRoutingInfo (Adressering Server), welke interactie(s) precies kunnen en moeten worden geïnitieerd. Er wordt hierbij slechts routing info gevraagd voor interacties waarvan het protocol gelijk is aan het protocol van de interactie in de scope van het token request.

Indien de beoogde interactie $get-aorta-data of een generieke v3-query betreft dan geldt dat deze info wordt gevraagd voor alle van SDS ontvangen FHIR- of v3-interacties. D.w.z., wanneer het te converteren access_token is uitgegeven voor een FHIR $get-aorta-data, dan wordt routing info gevraagd voor FHIR-interacties. Wanneer het te converteren access_token is uitgegeven voor een hybride generieke query, dan wordt routing info gevraagd voor v3-interacties.

Wanneer een GBZ-applicatie niet wordt gevonden door de Adressering Server, dan dient dit te worden gelogd. Indien geen enkele GBZ-applicatie wordt gevonden, dan is uitkomst “Geen destination gevonden” van toepassing.

Voor interacties van het type transaction/batch wordt in deze stap NIET gekeken naar de individuele interacties die deel uitmaken van de transaction/batch.

Interactie(s) kunnen niet worden bepaald

statuscode 500

Geen destination gevonden

statuscode 403, error=access_denied, error_description="Geen ontvangende applicatie gevonden."

Het systeem genereert de vereiste response en gaat verder met de exit stap van de main flow.

8

Het systeem genereert de vereiste AORTA access_tokens, conform de hoogste versie die wordt ondersteund door de audience (één access_token per GBZ-applicatie).

Access_tokens mogen niet door het systeem worden opgeslagen.

Voor de vulling van de scope van het access_token wordt gebruik gemaakt van classificerende attributen, zoals benoemd in de AORTA interactietabel, en indien van toepassing ook van te hanteren zoekparameters die zijn verkregen uit de SDS. Zie ook de “Toelichting vulling smart-on-fhir scope en _vrb_ter_scope in het AORTA access_token”.

Voor interacties van het type transaction/batch is het in deze stap noodzakelijk om te kijken naar de individuele interacties die deel uitmaken van de transaction/batch.

9

<exit>

Het systeem retourneert een response naar de primaire actor.

Voor meer informatie over de uitzonderingen, zie ook RFC 8693 sectie 2.2.2.

Post-condities

Het systeem heeft het verzoek op de juiste wijze verwerkt en heeft een daarbij passende response geretourneerd.

Het systeem heeft van het ontvangen request, de volgende attributen gelogd:

  • datum en tijd van ontvangst

  • request-id

  • initial-request-id

  • sender-id

    • role-id wanneer de sender van het request een VZVZ component is, en de aanroep niet via TLS geschiedt

    • common name wanneer de aanroep via TLS geschiedt

==

Het systeem heeft voor ieder uitgaand request, dat bij het doorlopen van de use case werd verzonden, de volgende attributen gelogd:

  • datum en tijd van verzending

  • request-id

  • initial-request-id

  • receiver-id

    • role-id wanneer de receiver van het request een VZVZ component is, en de aanroep niet via HTTP geschiedt

    • FQDN wanneer de aanroep via HTTP geschiedt

Aanvullend daarop heeft het systeem van het ontvangen request de volgende attributen gelogd:

  • request.grant_type

  • request.client_id

  • request.audience

  • request.requested_token_type

  • request.subject_token_type

  • ID van het subject_token

  • request.actor_token_type

  • ID van het actor_token

  • request.registration_token_type

  • ID van het registration_token

  • request.consent_token_type

  • ID van het consent_token

  • request.scope

Het systeem heeft van de geretourneerde response, de volgende attributen gelogd:

  • datum en tijd van response

  • request-id van het bijbehorende request

  • initial-request-id van het bijbehorende request

  • receiver-id

    • role-id wanneer de receiver van de response een VZVZ component is, en de aanroep niet via TLS geschiedt

    • common name wanneer de aanroep via TLS geschiedt

  • HTTP statuscode en eventueel geretourneerde foutinformatie

==

Het systeem heeft voor iedere response, die bij het doorlopen van de use case werd ontvangen, de volgende attributen gelogd:

  • datum en tijd van response

  • request-id van het bijbehorende request

  • initial-request-id van het bijbehorende request

  • sender-id

    • role-id wanneer de sender van de response een VZVZ component is, en de aanroep niet via TLS geschiedt

    • common name wanneer de aanroep via TLS geschiedt

  • HTTP statuscode en eventueel geretourneerde foutinformatie

Aanvullend daarop heeft het systeem van de geretourneerde de volgende attributen gelogd:

  • response.issued_token_type 

  • response.token_type 

  • response.expires_in

  • response.scope

  • jti van het uitgeven AORTA access_token

  • ver van het uitgeven AORTA access_token

Gebruik van de SDS bij het bepalen van de interacties

De SDS wordt gebruikt om informatie te verkrijgen over de interactie-id's en parameters die horen bij het gevraagde protocol, de gehanteerde contextcode en bij de rolcode van de verantwoordelijke. De SDS levert ook informatie over gegevenssoorten/bouwstenen die horen bij de gevonden interacties. Deze informatie kan worden gebruikt bij het zoeken naar bronnen in de Verwijsindex.

Het protocol, waarvoor bij de SDS informatie moet worden gevraagd, wordt bepaald a.d.h.v. het interaction-id in de scope van het token request:

  • Bij FHIR-operation vullen met "hl7fhir";

  • Bij generieke v3-query protocol weglaten, omdat dan ook SDS-info nodig is voor FHIR-interacties die functioneel gelijk zijn aan te initiëren v3-interacties.

De scope van uit te geven access_tokens is gebaseerd op SMART-on-FHIR. De scope bevat ook eventueel verplicht te hanteren zoekparameters en -waarden.

Wanneer een SMART-scope moet worden gemaakt voor een, naar FHIR te transformeren, v3-interactie, dan gebruikt het systeem hiervoor de info die was verkregen voor de FHIR-equivalent van de betreffende v3-interactie.

Een FHIR-equivalent van een v3-interactie wordt bepaald m.b.v. de interactietabel. Wanneer voor een v3-interactie meerdere FHIR-equivalents voorkomen in de interactietabel, dan wordt gekozen voor de FHIR-equivalent die blijkens het “preference” attribuut in de interactietabel de voorkeur heeft.

Voorbeeld:

  • Het systeem ontvangt een token request met scope “ZTZM_IN000004NL01~aorta.contextcode.MEDGEG~normaal“.

  • Een aanroep van de SDS Server, met contextCode MEDGEG, zonder protocol, levert de volgende interactie-id's op (let op: in werkelijkheid levert deze contextcode meer interacties op):

    • search:mp-MedicationAgreement:*

    • search:mp-VariableDosingRegimen:*

    • QUMA_IN991201NL04

    • QUDS_IN000001NL01

  • De scope van het access_token wordt dan altijd gevuld met “patient/MedicationRequest?category=http://snomed.info/sct|33633005 patient/MedicationRequest?category=http://snomed.info/sct|395067002“.

  • De _vrb_ter_scope van het access_token wordt gevuld met

    • Indien géén transformatie hoeft te worden uitgevoerd: “QUMA_IN991201NL04 QUDS_IN000001NL01~aorta.contextcode.MEDGEG~normaal“

    • Indien wel een transformatie moet worden uitgevoerd: “QUMA_IN991201NL04/<transformatie-id> QUDS_IN000001NL01/<transformatie-id>~aorta.contextcode.MEDGEG~normaal“

Indien de scope van het ontvangen token request één of meerdere van de generieke zoekparameters (effective-time, therapy-identifier, classifier, instance-identifier) bevat, dan transformeert het systeem deze, voor iedere van de SDS verkregen Interactie, m.b.v. de AORTA interactietabel, naar de juiste interactie-specifieke zoekparameters en waarden. De verkregen interactie-specifieke zoekparameters en waarden worden vervolgens toegevoegd aan de van de SDS verkregen informatie over de uit te sturen interacties. Indien een reeds gevulde zoekparameter waarde mag worden overschreven, dan is dit aangegeven in de van de SDS verkregen informatie. Wanneer een verkregen interactie-specifieke zoekparameter zou leiden tot een ongeoorloofde overschrijving van een door de SDS bepaalde parameter, dan wordt deze genegeerd.

Wanneer zoekparameters die worden verkregen uit de SDS variabelen bevatten (bijv. “geTODAY-400D”, dan vertaalt de autorisatie server deze naar correcte feitelijke waarden, zodat de scope van het access_token altijd een geldige waarde bevat.

Toelichting controle toestemming patiënt

Toestemming van de patiënt kan op de volgende manieren zijn vastgelegd:

  1. In het systeem van de bronhoudende zorgaanbieder;

  2. In een consent_token dat is uitgegeven door de bronhoudende zorgaanbieder;

  3. In het Mitz toestemmingsregister.

In de 1e situatie wordt de verwijsindex slechts gevuld wanneer toestemming is vastgelegd, en wanneer de bronhoudende zorgaanbieder gevonden dient te worden voor ongeadresseerde queries. Wanneer een bronhoudende zorgaanbieder over is gestapt op Mitz (zichtbaar in het APR middels een systeemrol), dan wordt geen verwijsindex bijgehouden, maar een actualiteitenregister. Het actualiteitenregister wordt altijd gevuld, onafhankelijk van de toestemming.

De Autorisatie Server geeft slechts een attest uit m.b.t. een uitgevoerde toestemmingstoets, wanneer, een ook daadwerkelijk kon worden vastgesteld dat er toestemming is gegeven:

  • een consent_token is ontvangen - toestemming wordt dan getoetst door vast te stellen dat de contextCode danwel het contextcode-deel van de Scope van het transactietoken gelijk is aan de contextCode van het consent_token;

  • de betreffende bronhoudende zorgaanbieder is overgestapt op Mitz - toestemming wordt dan getoetst middels een gesloten autorisatievraag aan het Mitz toestemmingsregister. Deze toets wordt uitgevoerd m.b.v. feature getSourceInfo. Wanneer getSourceInfo wordt uitgevoerd voor een specifieke source (URA of appID’s), dan kan het gebeuren dat de response geen dataCategories bevat. Dit heeft slechts gevolgen voor de attest claim van het uit te geven access_token, omdat geen toestemming kon worden vastgesteld. De betreffende appID('s) worden wel gewoon meegenomen in de verdere verwerking van het request.

Wanneer de betreffende bronhoudende zorgaanbieder niet is overgestapt op Mitz, en geen consent_token is ontvangen, dan wordt géén toestemmingstoets uitgevoerd, ook niet o.b.v. de verwijsindex, omdat er voor een geadresseerde vraag, niet vanuit kan worden gegaan dat de verwijsindex een juiste weerspiegeling is van de toestemming. Toestemming van de patiënt dient dan dus te worden getoetst in het bronsysteem zelf.

De Autorisatie Server gebruikt de attest claim van het AORTA access_token om aan te geven welke toetsen zij al dan niet heeft uitgevoerd.

Specifieke autorisatieregels RB-logging

Een persoon (patiënt), die zoekt vanuit een GBP, mag (vooralsnog) slechts loggegevens opvragen die betrekking hebben op zichzelf. Het BSN van deze persoon/patiënt is dan opgenomen in het SAML DigiD token. Het is ook deze BSN die wordt gebruikt bij de uitvoering van een interactie, waardoor geen specifieke controle is vereist voor deze situatie.

Een GBK-medewerker, die zoekt vanuit een GBK, mag loggegevens opvragen van alle BSN's. Het BSN van de persoon waarnaar wordt gezocht is opgenomen in het SAML PKIo Authenticatietoken. Het is ook deze BSN die wordt gebruikt bij de uitvoering van een interactie, waardoor geen specifieke controle is vereist voor deze situatie.

Specifieke autorisatieregels ACT/VWI

Een persoon (patiënt), die zoekt vanuit een GBP, mag (vooralsnog) slechts ACT/VWI-gegevens opvragen die betrekking hebben op zichzelf. Het BSN van deze persoon/patiënt is dan opgenomen in het SAML DigiD token. Het is ook deze BSN die wordt gebruikt bij de uitvoering van een interactie, waardoor geen specifieke controle is vereist voor deze situatie. Andere interacties dan zoeken zijn voor GBK-medewerkers niet toegestaan.

Een GBK-medewerker, die zoekt vanuit een GBK, mag ACT/VWI-gegevens opvragen van alle BSN's. Het BSN van de persoon waarnaar wordt gezocht is opgenomen in het SAML PKIo Authenticatietoken. Het is ook deze BSN die wordt gebruikt bij de uitvoering van een interactie, waardoor geen specifieke controle is vereist voor deze situatie. Andere interacties dan zoeken zijn voor GBK-medewerkers niet toegestaan.

Een zorgverlener/medewerker mag ACT/VWI-gegevens opvragen, aanmelden, bijwerken of verwijderen. Het BSN van de persoon waarop de gegevens betrekking hebben is opgenomen in het SAML transactietoken. Een GBZ-applicatie mag slechts interacties uitvoeren m.b.t. ACT-VWI-gegevens van de eigen applicatie (appID).

Specifieke autorisatieregels Abonnementenregister

Een zorgverlener, die werkt vanuit een GBZ mag

  • abonnementen registreren op naam van de eigen GBZ-applicatie;

  • abonnementen van de eigen GBZ-applicatie verlengen;

  • abonnementen van de eigen GBZ-applicatie verwijderen;

  • abonnementen van de eigen GBZ-applicatie opvragen.

Toetsing van tokens

Toetsing DigiD Authenticatietoken

Het DigiD authenticatietoken is een SAML Assertion, met daarin ondermeer de volgende elementen en attributen die informatie bevatten over de geldigheid ervan:

  • Conditions.NotBefore en Conditions.NotOnOrAfter - Bevat de geldigheid van de Assertion, bij DigiD gesteld op -2 en +2 minuten vanaf het verzendmoment. Dit is de geldigheid voor het verwerken van de SAML-Assertion. Deze elementen hoeven door het LSP niet te worden gecontroleerd.

  • Subject.SubjectConfirmationData.NotOnOrAfter - Bevat volgens de SAML-standaard: "A time instant at which the subject can no longer be confirmed." Bij DigiD valt deze samen met Conditions.NotOnOrAfter. Dit element hoeft door het LSP niet te worden gecontroleerd.

  • AuthnStatement.@AuthnInstant - Het moment waarop de eindgebruiker zich heeft geauthentiseerd bij DigiD. Dit tijdstip Dit tijdstip valt vaak samen met of net voor Assertion.@IssueInstant.

Het systeem toetst of:

  1. De Assertion correct is ondertekend door de Signature te valideren met het gerefereerde authenticatie certificaat. Het gebruikte certificaat en de relevante certificaatketen te valideren op geldigheid, inclusief revocatie.

  2. Het token is uitgegeven door DigiD (Assertion.Issuer).

  3. Subject.NameID (het sectoraal nummer) een BSN aanduidt.

  4. Bij interactie vanuit GBP: is het token bedoeld voor Volgjezorg (Assertion.AudienceRestriction.Audience).

  5. Heeft authenticatie van de gebruiker voldoende recent plaatsgevonden, d.w.z. AuthnStatement.@AuthnInstant > (<huidige tijd> - <gracetime>). De te hanteren gracetime in minuten, moet per use case (GBP-request) geconfigureerd kunnen worden.

Generieke toetsing AORTA SAML Assertions

Voor AORTA SAML Assertions moet altijd eerst worden gecontroleerd of:

  1. De aanduiding voor de versie van SAML gedefinieerd is op "2.0".

  2. Het token conform de Audience mag worden verwerkt.

  3. Slechts en ook alle elementen en attributen zijn opgenomen, die zijn gespecificeerd.

  4. Het request is ontvangen binnen de geldigheidsperiode van het token.

Toetsing PKIo Authenticatietoken

Het PKIo Authenticatietoken is een SAML Assertion. Het systeem dient te toetsen of:

  1. De Assertion correct is ondertekend door de Signature te valideren met het gerefereerde authenticatie certificaat. Het gebruikte certificaat en de relevante certificaatketen te valideren op geldigheid, inclusief revocatie.

  2. Er wordt voldaan aan alle controles, zoals omschreven in de sectie "Generieke toetsing AORTA SAML Assertions".

  3. Een Assertion met eenzelfde ID attribuut niet al eerder is ontvangen.

  4. Het serienummer van het authenticatie certificaat overeenkomt met de NameID van het Subject.

  5. De waarde van het InteractionId Attribuut overeenstemt met de ontvangen scope parameter van het token exchange request.

  6. De waarde van het contextCode Attribuut overeenstemt met de ontvangen scope parameter van het token exchange request.

Toetsing AORTA transactietoken

Het systeem toetst of:

TLS-Client is een GBx-applicatie

TLS-Client is Resource Broker v3-in

De Assertion correct is ondertekend, door de Signature te valideren met het gerefereerde authenticatie certificaat. Het gebruikte certificaat en de relevante certificaatketen te valideren op geldigheid, inclusief revocatie.

-

Er wordt voldaan aan alle controles, zoals omschreven in de sectie "Generieke toetsing AORTA SAML Assertions".

Een Assertion met eenzelfde ID attribuut niet al eerder is ontvangen.

De Issuer gelijk is aan de URA uit het servercertificaat van de TLS-Client waarmee wordt gecommuniceerd.

-

De Resource Client (zoals aangeduid in het applicationID Attribuut) onder de verantwoordelijkheid van de Issuer valt.

Indien Subject.NameID is gevuld: het transactietoken is getekend m.b.v. een UZI-zorgverlenerspas, of medewerker-pas-op-naam.

-

Het interactie-deel in de scope parameter van het token exchange request moet overeenkomen met:

  • het InteractionId in het transactietoken, of met

  • het interactie-deel in de Scope van het transactietoken.

Het contextcode-deel in scope parameter van het token exchange request moet gelijk zijn aan:

  • de contextCode van transactietoken, of aan

  • het contextcode-deel in de Scope van het transactietoken.

Het Mitz situatiecode-deel in scope parameter van het token exchange request moet gelijk zijn aan:

  • het Mitz situatiecode-deel in de Scope van het transactietoken.

Toetsing AORTA mandaattoken

Het systeem toetst of:

  1. De Assertion correct is ondertekend door de Signature te valideren met het gerefereerde authenticatie certificaat. Het gebruikte certificaat en de relevante certificaatketen te valideren op geldigheid, inclusief revocatie. Indien een certificaat op de CRL is geplaatst, dan dient dit plaats te hebben gevonden nadat het token gegenereerd en ondertekend is.

  2. Er wordt voldaan aan alle controles, zoals omschreven in de sectie "Generieke toetsing AORTA SAML Assertions".

  3. Het ID (URA) van de organisatie waarbinnen het mandaat geldig is (Subject.NameID) overeenkomt met het ID van de initiërende organisatie (Issuer van het transactietoken).

  4. Het mandaattoken is ondertekend door de Issuer (UZI-nummer en -rolcode dienen overeen te komen met de bijbehorende waarden uit het UZI-certificaat van de mandaatgever).

  5. Het attribuut "autorisatieregel/context" identiek is aan het overeenkomstige attribuut in het transactietoken.

Toetsing AORTA inschrijftoken

Het systeem toetst of:

  1. De Assertion correct is ondertekend door de Signature te valideren met het gerefereerde authenticatie certificaat. Het gebruikte certificaat en de relevante certificaatketen te valideren op geldigheid, inclusief revocatie. Indien een certificaat op de CRL is geplaatst, dan dient dit plaats te hebben gevonden nadat het token gegenereerd en ondertekend is.

  2. Er wordt voldaan aan alle controles, zoals omschreven in de sectie "Generieke toetsing AORTA SAML Assertions".

  3. Het ID (URA) van de organisatie die het token heeft uitgegeven (Issuer) gelijk is aan het ID van de organisatie die het bijbehorende transactietoken heeft uitgegeven.

  4. Het gevalideerde BSN (Subject.NameID) in het inschrijftoken overeenkomt met de inhoud van het "patientIdentifier" attribuut in het bijbehorende transactietoken.

Indien het inschrijftoken is ondertekend met een UZI-pas:

  1. De zorgverlener/zorgmedewerker is geauthenticeerd via het voorgeschreven authenticatiemiddel (SmartCardPKI).

  2. De ID van de "Uitvoerder" overeenkomt met het UZI-nummer in het certificaat waarmee het token is ondertekend.

Indien het inschrijftoken ondertekend is met een identiteitscertificaat van ZORG-ID, dan dienen de volgende extra controles plaats te vinden:

  1. Het attribuut “Scantoken” dient een geldig scantoken te bevatten.

  2. Het Subject uit het inschrijftoken (BSN) dient overeen te komen met de waarde van het Subject uit het scantoken.

  3. De AuthnStatement.@AuthnInstant uit het inschrijftoken dient overeen te komen met de waarde van het AuthnInstant attribuut uit het scantoken.

  4. De attribuutwaarde van “Uitvoerder” dient overeen te komen met de Common Name van het meegestuurde identiteitscertificaat.

Toetsing AORTA consent_token

Het systeem toetst of:

  1. De Assertion correct is ondertekend door de Signature te valideren met het gerefereerde authenticatie certificaat. Het gebruikte certificaat en de relevante certificaatketen te valideren op geldigheid, inclusief revocatie. Indien een certificaat op de CRL is geplaatst, dan dient dit plaats te hebben gevonden nadat het token gegenereerd en ondertekend is.

  2. Er wordt voldaan aan alle controles, zoals omschreven in de sectie "Generieke toetsing AORTA SAML Assertions".

  3. Indien Subject.NameID is gevuld, het transactietoken is getekend m.b.v. een UZI-zorgverlenerspas, of medewerker-pas-op-naam.

  4. De clientID gelijk is aan, danwel hoort bij de URA uit het servercertificaat van de TLS-Client waarmee wordt gecommuniceerd.

  5. De URA of het appID van het Reagerend GBZ in de Audience van het bijbehorende AORTA transactietoken gelijk is aan, danwel hoort bij de URA in de Issuer van het consent_token.

  6. Het "patientIdentifier" attribuut in het consent_token overeenkomt met het "patientIdentifier" attribuut in het bijbehorende transactietoken.

Voorbeelden

Uitgeven AORTA access_token t.b.v. $get-aorta-data

Inkomend token exchange request:

POST [base]/tokenx/v1
Content-Type: application/x-www-form-urlencoded
AORTA-ID: initialRequestID=<UUID conform RFC4122>; requestID=<UUID conform RFC4122>

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&audience=urn%3Aoid%3A2.16.840.1.113883.2.4.6.6.352
&requested_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Ajwt
&subject_token=<base64url-encoded SAML Assertion>
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Asaml2
&actor_token=<base64url-encoded SAML Assertion>
&actor_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Asaml2
&registration_token=<base64url-encoded SAML Assertion>
&registration_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Asaml2
&scope=operation%3A$get-aorta-data%3A1~aorta.contextcode.MEDGEG~normaal

Autorisatie Server ZA retourneert een token exchange response:

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "access_token": "2YotnFZFEjr1zCsicMWpAA",
    "issued_token_type": "urn:ietf:params:oauth:token-type:jwt",
    "token_type": "Bearer",
    "expires_in": 20,
    "scope": "operation:$get-aorta-data:1~aorta.contextcode.MEDGEG~normaal"
}

Converteren AORTA access_token t.b.v. $get-aorta-data

Inkomend token request:

POST [base]/token/v1
Content-Type: application/x-www-form-urlencoded
AORTA-ID: initialRequestID=<UUID conform RFC4122>; requestID=<UUID conform RFC4122>

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&assertion=<AORTA access_token>
&scope=operation%3A$get-aorta-data%3A1~aorta.contextcode.MEDGEG~normaal

Een aanroep van de SDS Server, met contextCode MEDGEG, levert de volgende interactie-id's op:

  • search:mp-MedicationAgreement:*

  • search:mp-VariableDosingRegimen:*

Blijkens de VWI Server beschikken 2 GBZ-applicaties over de gevraagde gegevens.

Na een aanroep van de Adressering Server, met parameters:

Blijkt dat de volgende interactie kan worden verzonden, en aan slechts één van de GBZ-applicaties:

  • search:mp-MedicationAgreement:1, waarbij transformation nummer 3 moet worden uitgevoerd.

Autorisatie Server ZA retourneert een token response:

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

[{
    "access_token": "2YotnFZFEjr1zCsicMWpAA",
    "issued_token_type": "urn:ietf:params:oauth:token-type:jwt",
    "token_type": "Bearer",
    "expires_in": 20,
    "scope": "search:mp-MedicationAgreement:1/3~aorta.contextcode.MEDGEG~normaal"
}]

Inkomend token exchange request:

POST [base]/tokenx/v1
Content-Type: application/x-www-form-urlencoded
AORTA-ID: initialRequestID=<UUID conform RFC4122>; requestID=<UUID conform RFC4122>

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&audience=urn%3Aoid%3A2.16.840.1.113883.2.4.6.6.352
&requested_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Ajwt
&subject_token=<base64url-encoded SAML Assertion>
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Asaml2
&scope=search%3AMedicationAgreement%3A1 search%3Amp-VariableDosingRegimen%3A1 search%3Amp-AdministrationAgreement%3A1~aorta.contextcode.MEDGEG~normaal

hasConformance request naar Resource Broker APR om de conformances van de client te toetsen:

POST [base endpointadres]/hasConformance/v1
Content-Type: application/json; charset=utf-8
AORTA-ID: initialRequestID=<UUID conform RFC4122>; requestID=<UUID conform RFC4122>
{
    "applicationId": "352",
    "interactionId": ["search:MedicationAgreement:1", "search:mp-VariableDosingRegimen:1", "search:mp-AdministrationAgreement:1"]
}

Ontvangen hasConformance response:

200 OK
Content-Type: application/json; charset=utf-8

{
    "applicationId": "352",
    "fqdn": "some_fqdn",
    "conformanceStatus": [{
        "interactionId": "search:MedicationAgreement:1",
        "status": "Yes"
    }, {
        "interactionId": "search:mp-VariableDosingRegimen:1",
        "status": "Yes"
    }, {
        "interactionId": "search:mp-AdministrationAgreement:1",
        "status": "Yes"
    }]
}

check request aan MAP Server:

POST [base endpointadres]/check/v1
Content-Type: application/json; charset=utf-8
AORTA-ID: initialRequestID=<UUID conform RFC4122>; requestID=<UUID conform RFC4122>

{

    "interactionId": ["search:MedicationAgreement:1", "search:mp-VariableDosingRegimen:1", "search:mp-AdministrationAgreement:1"],

    "roleCode": {
        "code": "X",
        "codeSystem": "2.16.840.1.113883.2.4.15.111"
    },

    "dataCategory": {
        "code": "MEDGEG",
        "codeSystem": "urn:oid:2.16.840.1.113883.2.4.3.111.15.1"
    }

}

Ontvangen check response:

200 OK
Content-Type: application/json; charset=utf-8

[{
        "interactionId": "search:MedicationAgreement:1",
        "status": "Allow"
    },
    {
        "interactionId": "search:mp-VariableDosingRegimen:1",
        "status": "Allow"
    },
    {
        "interactionId": "search:mp-AdministrationAgreement:1",
        "status": "Deny"
    }
]

getInteractionContexts request aan SDS Server:

POST [base endpointadres]/getInteractionContexts/v1
Content-Type: application/json; charset=utf-8
AORTA-ID: initialRequestID=<UUID conform RFC4122>; requestID=<UUID conform RFC4122>

{
    "protocol": "hl7fhir",
    "roleCode": {
        "code": "X",
        "codeSystem": "urn:oid:2.16.840.1.113883.2.4.15.111"
    },
    "contextCode": "MEDGEG"
}

Ontvangen getInteractionContexts response:

200 OK
Content-Type: application/json; charset=utf-8

[
    [{
            "interactionId": "search:MedicationAgreement:1",
            "dataCategory": [{
                "code": "",
                "codeSystem": ""
            }]
        }
    ],
    [{
            "interactionId": "search:mp-VariableDosingRegimen:1",
            "dataCategory": [{
                "code": "",
                "codeSystem": ""
            }]
        }
    ]
]

Géén aanvullende autorisatie-inperkingen aanwezig in het response om over te nemen.

getRoutingInfo request aan Adressering Server:

POST [base endpointadres]/getRoutingInfo/v1
Content-Type: application/json; charset=utf-8
AORTA-ID: initialRequestID=<UUID conform RFC4122>; requestID=<UUID conform RFC4122>

{
    "destination": {
        "code": "3287",
        "codeSystem": "urn:oid:2.16.840.1.113883.2.4.6.6"
    },
    "interaction": [{
        "id": "search:MedicationAgreement:1"
    }, {
        "id": "search:mp-VariableDosingRegimen:1"
    }],
    "client ": {
        "code": "352",
        "codeSystem": "urn:oid:2.16.840.1.113883.2.4.6.6"
    }
}

Ontvangen getRoutingInfo  response:

200 OK
Content-Type: application/json; charset=utf-8

[{
    "interactionId": "search:mp-VariableDosingRegimen:1"
}, {
    "interactionId": "search:MedicationAgreement:1",
    "destinationInfo": [{
        "destination": {
            "code": "3287",
            "codeSystem": "urn:oid:2.16.840.1.113883.2.4.6.6"
        },
        "fqdn": "bron-2.zorgaanbieder.nl",
        "transformationId": "3"
    }]
}]

Autorisatie Server ZA retourneert een token exchange response:

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "access_token": "2YotnFZFEjr1zCsicMWpAA",
    "issued_token_type": "urn:ietf:params:oauth:token-type:jwt",
    "token_type": "Bearer",
    "expires_in": 20,
    "scope": "search:MedicationAgreement:1/3~aorta.contextcode.MEDGEG~normaal"
}

JavaScript errors detected

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

If this problem persists, please contact our support.