Implementatie handleiding ketenlogging en monitoring AS v2.2.X
Introductie
Bij de introductie van het afsprakenstelsel 2.1.0 en in de aanloop daar naartoe is bij deelnemers verwarring ontstaan over de correctie implementatie van de logging functionaliteit zoals beschreven in het afsprakenstelsel. Deze implementatie handleiding beoogt toelichting te geven op de correcte implementatie van de specificaties en verduidelijking van de momenten in de keten en logberichten welke worden uitgewisseld met het loggingscomponent.
Deze handleiding is een addendum op het afsprakenstelsel..
Endpoints
De acceptatie- en productie endpoints zijn weergegeven in de volgende tabel:
Endpoint | URProductie URI |
---|---|
Productie endpoint voor de logging service | |
Swagger definitie voor de productie endpoint | |
Acceptatie endpoint voor de logging service | |
Swagger definitie voor de acceptatie endpoint | https://acc-api.medmij.nl/eagleeye/v1/swagger |
Maximale Payload
Hoewel JSON geen maximale lengte kent, heeft het logging component wel een maximale grootte welke het om technische en performance redenen kan verwerken. Deze zijn van belang bij het batchgewijs insturen van logberichten aan het logcomponent. Het logcomponent kent de volgende limieten:
Limiet | Waarde |
---|---|
Maximale berichtgrootte | 60 MB (Megabyte) |
Maximaal aantal karakters | 62.914.560 karakters |
Doel
De loggingsfunctionaliteit in het afsprakenstelsel heeft als doel de keten als geheel te kunnen monitoren en eventuele problemen in de keten vroegtijdig te kunnen signaleren. Daarnaast geeft de loggingsfunctionaliteit stichting MedMij de mogelijkheid het gebruik van de keten inzichtelijk te maken en op basis hiervan beslissing ten aanzien van nieuwe functionaliteiten en beleid te kunnen maken.
Om meerwaarde te kunnen leveren en de rapportages die volgen uit het monitoren is het echter van groot belang dat de logging zowel qua structuur als qua inhoud de juiste informatie bevat, zodat het stelsel als geheel betrouwbaarder en stabieler wordt.
De logging functionaliteit is echter aanvullend op de reeds bestaande eigen logging van de deelnemers. Hoewel de logging centrale inzichten kan bieden, ontslaat het deelnemers niet van de verantwoordelijkheid zelf effectieve logging uit te voeren op hun systemen.
Flows
In het afsprakenstelsel en de hoofdfunctie Verzamelen zijn drie verschillende fasen te onderscheiden:
Fase 1: Autorisatie van de aanvrager
Tijdens de autorisatie fase worden de volgende controles uitgevoerd:
Staat de aanvrager op de whitelist en is deze correct opgenomen in de stelselnode?
Kan de identiteit van de aanvrager worden vastgesteld middels de autorisatie autoriteit (in de praktijk, DigiD)?
Is de aanvrager ontvankelijk voor het ontvangen van de gegevens en is de dienst beschikbaar?
Verleent de aanvrager, al dan niet langdurig, toestemming voor het verstrekken van de gegevens?
Fase 2: Opvragen van refresh token welke bij volgende verzoeken zal worden gebruikt
Tijdens de refresh token fase worden de volgende controles uitgevoerd:
Kan een refresh token worden opgehaald welke voor eenvolgende aanvragen kan worden gebruikt?
Is de aanvrager ontvankelijk voor het ontvangen van de gegevens?
Fase 3: Opvragen van de gegevens voor de betreffende gegevensdienst
Tijdens de laatste fase worden de gegevens opgevraagd voor de betreffende gegevensdienst. Hierbij worden de volgende controles uitgevoerd:
Is de aanvrager ontvankelijk voor het ontvangen van de gegevens?
Zijn de opgevraagde gegevens beschikbaar?
Elk van deze fasen hebben verschillende “touchpoints“ in het proces, waarvoor logging wordt voorgeschreven om de berichtenuitwisseling in de keten te kunnen monitoren.
De gehele flow van de hoofdfunctie verzamelen is in onderstaand diagram weergegeven:
Flow verzamelen
Referentie: Logging interface Verzamelen Delen
In bovenstaande flow zijn de drie fasen vanuit logging perspectief weergegeven. Uitgaande van een normale flow, dus zonder langdurige toestemming, resulteert de flow in de volgende logberichten voor de rol DVP:
De inhoud en structuur van de logberichten wordt later in dit addendum beschreven.
DVP Logberichten (Happy flow)
Stap | Logbericht |
1 | send_authorization_request* |
12 | receive_authorization_response* |
13 | send_token_request |
17 | receive_token_response |
18 | send_resource_request |
23 | receive_resource_response |
DVP Logberichten (Uitzonderingen)
Stap | Logbericht |
17a | receive_availability_check_error |
17b | receive_token_request_error |
23a | receive_availability_check_error |
23b | receive_resource_request_error |
23c | receive_resource_error_response |
Voor de DVA resulteert de gehele flow in de volgende berichten:
DVA Logberichten (Happy flow)
Stap | Logbericht |
2 | receive_authorization_request* |
3 | show_landing_page* |
4 | send_authentication_request* |
5 | receive_authentication_response* |
6 | send_artifact_resolution_request* |
7 | receive_artifact_response* |
8 | result_availability_check* |
9 | show_consent_page* |
10 | receive_consent* |
11 | send_authorization_response* |
14 | receive_token_request |
15 | result_availability_check |
16 | send_token_response |
19 | receive_resource_request |
20 | result_availability_check |
21 | result_gathering_information |
22 | send_resource_response |
DVA Logberichten (Uitzonderingen)
Stap | Logbericht |
3a | authorization_request_error & show_authorization_request_error_page* |
3b | send_authorization_request_error* |
4a | send_authorization_cancellation* |
5a | receive_authorization_cancellation* |
5b | receive_authentication_error* |
7a | receive_artifact_request_error & show_authentication_error_page* |
8a | availability_check_error & show_availability_check_error_page* |
11a | send_authorization_cancellation* |
15a | availability_check_error & send_availability_check_error |
16a | send_token_request_error |
20a | availability_check_error & send_availability_check_error |
22a | send_resource_request_error |
22b | send_resource_error_response |
* Bij langdurige toestemming (Voor geselecteerde DVA) worden stap 1 en 12 niet gelogd en start de happy flow voor de DVP bij stap 13.
Samengevat zou 1 volledige uitwisseling tussen de DVP en de DVA moeten leiden tot 6 logberichten voor de DVP en 17 logberichten voor de DVA voor een totaal van 23 logberichten.
Bij de berichten is steeds een request / response structuur beoogt, waarbij een request van de DVP leidt tot een response van de DVA.
Tijdens de verwerking van de functionaliteiten van het afsprakenstelsel is het mogelijk dat er verwachte en onverwachte fouten optreden, waarvoor error berichten zijn gedefinieerd, zoals benoemd bij de uitzonderingen.
Berichtstructuur
Voor alle berichten in de logging interface is een JSON formaat beschreven in het afsprakenstelsel waaraan alle berichten in de logging keten moeten voldoen.
Event Object (verplicht)
Het event object is verplicht voor alle berichten in het afsprakenstelsel welke worden verstuurd aan de loggingscomponent:
Voorbeeld:
"event": {
"type": "send_authorization_request",
"location": "mijn.pgo.nl",
"datetime": "2023-03-28T22:14:23.618+01:00",
"session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
}
Attributen:
Attribuut | Omschrijving | Format | Example | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
type | Bevat het type event waarvoor het bericht wordt gelogd. Dit is een van de berichttypen zoals genoemd in tabel met berichten. | String (48) | 1 van de event typen zoals gedefinieerd in afsprakenstelsel | 48 | Ja | AS 2.1 |
location | De FQDN van het endpoint van de DVP, danwel DVA, waarop het request wordt ontvangen cq waarvan het request wordt verstuurd. | String (64) | 64 | Ja | Geregistreerde common name in R&A | |
datetime | Datum en tijd van de gebeurtenis (UTC)+offset. | DateTime (UTC format) | 2024-02-14T01:29:22−07:00
| 29 | Ja | https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/a-12-4-4-kloksynchronisatie |
session_id | Identifier van de sessie bij de loggende partij. Wanneer een sessie wordt gestart (uit eigen initiatief of als reactie op een ontvangen verzoek), zal een sessie_id aangemaakt worden welke in alle logberichten kan worden opgenomen. De DVP is een initiërende partij en bepaalt zelf wanneer de sessie start en eindigt. Voor de DVA is een sessie gedefinieerd als het moment waarop een verzoek binnenkomt (request) tot het moment dat het antwoord geeft op dit verzoek (response). De DVA is stateless en kan derhalve geen sessie onderhouden over meerdere verzoeken heen. | String (36) | Bij voorkeur UUIDv4 | 36 | Ja | Door deelnemer gegenereerd |
trace_id | Unique identifier van het ketenverzoek. Deze wordt aangemaakt door de DVP voor alle berichten in een enkele keten gebruikt. Hierdoor is het mogelijk alle berichten welke behoren bij de gehele flow zoals hierboven beschreven te identificeren. Deze wordt in de praktijk meegegeven als X-correlation-ID. Belangrijk: Dit trace_id wordt voor elke nieuwe flow op het moment van het ophalen van een refresh token opnieuw door de DVP gegenereerd. De DVA gebruikt alleen de trace_id welke door de DVP in het bericht wordt doorgegeven. De DVA genereert dus zelf geen trace_id. Als er geen trace_id beschikbaar is in het request moet een lege UUIDv4 worden gebruikt ( | String (36) | 6cc1cd7c-7086-4344-be00-e5c7e4c332bc | 36 | Ja | Door DVP gegenereerd |
Request Object (Verplicht bij onderstaande berichten)
Bij sommige berichten wordt afhankelijk van het berichttype additioneel een Request object verwacht. Dit object wordt additioneel verwacht bij de volgende berichtenttypen:
DVP Logberichten (Happy flow)
Stap | Logbericht (DVP) |
1 | send_authorization_request* |
13 | send_token_request |
18 | send_resource_request |
DVA Logberichten (Happy flow)
Stap | Logbericht (DVA) |
2 | receive_authorization_request* |
4 | send_authentication_request* |
6 | send_artifact_resolution_request* |
14 | receive_token_request |
19 | receive_resource_request |
Het request object bevat additionele attributen die het request verduidelijken en voorzien van extra metadata.
Voorbeeld:
"request": {
"id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
"method": "GET",
"client_id": "mijn.pgo.nl",
"server_id": "api.dva.nl",
"uri": "https://api.dva.nl/2.0.0/authorize",
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
id | Het unieke ID van het verzoek. Ieder request heeft een eigen, nieuwe, unieke ID welke gekoppeld moet kunnen worden aan een response object van de ontvangende partij. | String | UUIDv4 | 36 | Ja | |
method | De gebruikte HTTP method (Get/Post/Put) van het verzoek. Let op: niet van het logbericht. | String | Een van de volgende waarden: “get“, “post“, “put“ | 4 | Ja | |
client_id | De FQDN verzoekbericht verstuurd. Dit is NIET de zorgaanbieder. Dit is altijd ofwel de DVP ofwel de DVA. | String | Indien niet beschikbaar kan deze worden gevuld met 'unknown' | Ja | R&A | |
server_id | De FQDN van de ontvanger van het verzoek (waar het request naartoe wordt gestuurd danwel wie het request ontvangt). | String | Ja | R&A | ||
uri | De URI waar het request naartoe wordt gestuurd (endpoint) | String | Ja |
Bij de volgende berichttypen wordt het request object uitgebreid met een aantal extra attributen.
DVP logberichten:
Stap | Logbericht |
1 | send_authorization_request* |
Voorbeeld:
"request": {
"id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
"method": "GET",
"client_id": "mijn.pgo.nl",
"server_id": "api.dva.nl",
"uri": "https://api.dva.nl/2.0.0/authorize",
"provider_id": "een.huisarts@medmij",
"response_type": "code",
"redirect_uri": "https://mijn.pgo.nl/medmij",
"state": "ipcxyhlbjtvduydtneoaflwiismwxfmj"
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
provider_id | Het identificerende kenmerk (MedMij Aanbiedersnaam) van de betrokken aanbieder. | String | 280 | Ja | ZAL (zorgaanbiedernaam) https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/aanbiedersnamenbeleid https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/authorization-interface core.authint.200 | |
response_type | Zolang gebruikt gemaakt wordt van oAuth grant, altijd de waarde “code”. | String | code | 4 | Ja | https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/authorization-interface core.authint.200 |
redirect_uri | De uri waarnaar geredirect wordt zodra authenticatie is voltooid. | String | Ja | oAuthClientList (RedirectUri) | ||
state | De oAuth2 state parameter. De deelnemers genereren deze zelf volgens de specificatie en geven deze mee met authenticatie requests. Bij de response wordt deze waarde vergeleken met de waarde in het antwoord. | String | 512 (min 128) | Ja | https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/authorization-interface core.authint.200 |
Bij de volgende berichttypen wordt het Request object uitgebreid met de volgende attributen:
DVA Logberichten:
Stap | Logbericht |
6 | send_artifact_resolution_request* |
Voorbeeld:
"request": {
"id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
"method": "GET",
"client_id": "api.dva.nl",
"server_id": "preprod1.digid.nl",
"uri": "https://preprod1.digid.nl/saml/idp/request_authentication",
"request_type": "SAML_assertion"
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
request_type | Het type request. Deze bevat altijd de waarde 'SAML_assertion'. | String | “SAML_assertion“ | 14 | Ja |
Bij de volgende berichttypen wordt het Request object uitgebreid met de volgende attributen:
DVP logberichten:
Stap | Logbericht |
13 |
|
Voorbeeld:
"request": {
"id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
"method": "GET",
"client_id": "mijn.pgo.nl",
"server_id": "api.dva.nl",
"uri": "https://api.dva.nl/2.0.0/authorize",
"grant_type": "authorization_code",
"initiated_by": "person"
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
grant_type | De waarde moet 'authorization_code' of 'refresh_token' zijn, waarbij de laatste alleen gebruikt mag worden bij het uitvoeren van een langdurige toestemming | String | “authorization_code“ of “refresh_token“ (bij langdurige toestemming) | 18 | Ja | |
initiated_by | De waarde moet 'person' of 'machine' zijn, waarbij de laatste alleen gebruikt mag worden bij automatisch verzamelen. Let op! Deze waarde wordt alleen door de DVP gelogd. | String | “person“ indien geïnitieerd vanuit gebruiker, “machine“ voor wanneer een geautomatiseerde trigger de actie start) | 7 | Ja |
Bij de volgende berichttypen wordt het Request object uitgebreid met de volgende attributen:
DVA logberichten:
Stap | Logbericht |
14 |
|
Voorbeeld:
"request": {
"id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
"method": "GET",
"client_id": "mijn.pgo.nl",
"server_id": "api.dva.nl",
"uri": "https://api.dva.nl/2.0.0/authorize",
"grant_type": "authorization_code"
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
grant_type | De ontvangen grant_type van de aanvrager | String | “authorization_code“ of “refresh_token“ (bij langdurige toestemming) | 18 | Ja |
Bij de volgende berichttypen wordt het request object uitgebreid met de volgende attributen:
DVP logberichten:
Stap | Logbericht |
18 |
|
Voorbeeld:
"request": {
"id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
"method": "GET",
"client_id": "mijn.pgo.nl",
"server_id": "api.dva.nl",
"uri": "https://api.dva.nl/2.0.0/authorize",
"provider_id": "een.huisarts@medmij",
"service_id": "49"
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
provider_id | Het identificerende kenmerk (MedMij Aanbiedersnaam) van de betrokken aanbieder. | String | 280 | Ja | ZAL (zorgaanbiedernaam) https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/aanbiedersnamenbeleid https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/authorization-interface core.authint.200 | |
service_id | Het identificerende kenmerk (nummer) van de opgevraagde gegevensdienst. | String | 7 | Ja | GDL (gegevensdienstid) |
Response object (verplicht bij onderstaande berichten)
Het response object bevat additionele metadata met betrekking tot het event. Het response event wordt gelogd wanneer het antwoord op de request van de aanvrager wordt verzonden.
Bij verschillende events is het response object verplicht in de logberichten:
Voor de DVP is deze verplicht in de volgende berichten:
DVP Logberichten (Happy flow)
Stap | Logbericht |
12 | receive_authorization_response* |
17 | receive_token_response |
23 | receive_resource_response |
DVP Logberichten (Uitzonderingen)
Stap | Logbericht |
23c | receive_resource_error_response |
Voor de DVA is deze verplicht in de volgende berichten:
DVA Logberichten (Happy flow)
Stap | Logbericht |
5 | receive_authentication_response* |
7 | receive_artifact_response* |
11 | send_authorization_response* |
16 | send_token_response |
22 | send_resource_response |
DVA Logberichten (Uitzonderingen)
Stap | Logbericht |
22b | send_resource_error_response |
Voorbeeld:
"response": {
"request_id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
"status": 200
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
request_id | De corresponderende id welke door de aanvrager in het request object is meegegeven. Dit ID koppelt request aan de response. Als er geen request_id beschikbaar is, gebruik dan een lege UUIDv4 (00000000-0000-0000-0000-000000000000). | String | UUIDv4 | 36 | Ja | MedMij Request ID (AS 2.1) core.authint.200 core.tknint.208 core.rscint.201 |
status | De HTTP status code van de response naar de requestor. Status codes zijn gegroeppeerd in de volgende classen: #; - Informational responses (100 – 199) #; - Successful responses (200 – 299) #; - Redirection messages (300 – 399) #; - Client error responses (400 – 499) #; - Server error responses (500 – 599) | Integer | 3 | Ja |
Error object (verplicht bij alle logberichten waarin een fout wordt gerapporteerd)
Tijdens het proces is het mogelijk dat op verschillende punten een fout (exception) optreedt, waarbij een error object meegegeven moet worden in het logbericht.
Dit object is verplicht bij de volgende berichttypen:
DVP Logberichten (Uitzonderingen)
Stap | Logbericht |
17a | receive_availability_check_error |
17b | receive_token_request_error |
23a | receive_availability_check_error |
23b | receive_resource_request_error |
23c | receive_resource_error_response |
Voor de DVA resulteert de gehele flow in de volgende berichten:
DVA Logberichten (Uitzonderingen)
Stap | Logbericht |
3a | authorization_request_error |
3b | send_authorization_request_error* |
5b | receive_authentication_error* |
7a | receive_artifact_request_error |
8a | availability_check_error |
15a | availability_check_error & send_availability_check_error |
16a | send_token_request_error |
20a | availability_check_error & send_availability_check_error |
22a | send_resource_request_error |
22b | send_resource_error_response |
Voorbeeld:
"error": {
"code": "access_denied",
"description": "no_information_available"
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
code | Indien de fout is ontstaan als gevolg van de oAuth flow, wordt de waarde van het oAuth 2.0 attribuut 'error' overgenomen. Indien de fout is ontstaan buiten de oAuth flow of geen gevolg is van het oAuth process, , wordt aanbevolen de waarde 'other' te gebruiken. | String |
| Ja | ||
description | Beknopte omschrijving van de geregistreerde fout. In het bericht availability_check_error wordt de description gevuld met de volgende waarden: no_information_available (bij geen behandelrelatie), invalid_age of blocked | String | Ja |
Bij de volgende berichten wordt het Error object uitgebreid met de volgende attributen:
DVP logberichten:
Stap | Logbericht |
17b | receive_token_request_error |
23b | receive_resource_request_error |
DVA logberichten:
Stap | Logbericht |
3a | authorization_request_error |
3b | send_authorization_request_error* |
7a | receive_artifact_request_error |
16a | send_token_request_error |
22a | send_resource_request_error |
Voorbeeld:
"error": {
"code": "access_denied",
"description": "no_information_available",
"request_id" : "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
"status" : 400
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
request_id | De id van het request waarbij de fout is opgetreden. Als er geen request_id beschikbaar is, gebruik dan een lege UUIDv4 (00000000-0000-0000-0000-000000000000). | String | UUIDv4 | 36 | Ja | |
status | De HTTP status code | Integer | 3 | Ja |
Verduidelijking event 5
Events 4, 5, 6 en 7 loggen de oAuth flow op het moment van authenticeren door de gebruiker.
Event 4 (send_authentication_request) correleert aan stap 2 van de oAuth flow.
Middels stap 3 en 4 authenticeert de gebruiker zich bij de DVAuthN.
In stap 5 wordt de SAML artifact geretourneerd naar de DVA, welke correleert met Event 5 (receive_authentication_response).
Binnen de oAuth specificatie staat in de response van stap 5 het volgende:
Antwoord- type | Veldnaam | Formaat | Meer informatie |
succes | SAMLart | string | Het SAML-Artifact dat de dienstaanbieder gebruikt om het resultaat van de (gelukte of niet gelukte) authenticatie via de back channel op te halen. |
| RelayState | string | De waarde van RelayState die de dienstaanbieder app in het verzoek heeft doorgegeven. Indien de dienstaanbieder dit veld niet heeft gevuld in stap 2b, heeft dit veld in het antwoord de waarde null (niet de string "null"). |
fout | ErrorMessage | string | Een ‘plain tekst’ foutmelding in geval van technische fouten, waarbij het niet mogelijk is een SAMLart te versturen, meldt de app dat via deze ErrorMessage. Ook in enkele functionele foutsituaties stuurt de DigiD app via deze ErrorMessage een melding naar de dienstaanbieder, zodat die daar direct op kan reageren:
NB In overige foutsituaties stuurt de DigiD app een succes-response met een niet te resolven SAMLart. |
Indien de response een succes response is, wordt alleen Event 5 gelogd en gaat het proces verder. Indien de response een fout response is, wordt gekeken naar de inhoud van de ErrorMessage.
ErrorMessage | Event | Voorbeeld |
---|---|---|
_by_user | 5a receive_authorization_cancellation |
CODE
|
not_activated, timeout of icon_missing | 5b receive_authentication_error Description bevat hier de inhoud van de ErrorMessage. |
CODE
|
Information Object (verplicht bij result_gathering_information)
Het information object wordt door de DVA gelogd in de volgende berichten:
Logstap | Logbericht |
21 | result_gathering_information |
Voorbeeld:
"information": {
"successful": ["MedicationRequest", "Observation", "Patient", "Encounter", "DocumentReference", "EpisodeOfCare", "Composition"],
"empty": ["AllergyIntolerance"],
"unsuccessful": ["Appointment"]
}
Attributen:
Attribuut | Omschrijving | Format | Value | Max | Verplicht J/N | Bron |
---|---|---|---|---|---|---|
successful | Bevat een array met de namen van de resources voor welke informatie succesvol opgehaald kon worden. | Array of String | Ja | Catalogus | ||
empty | Bevat een array met de namen van de resources voor welke geen informatie beschikbaar is. | Array of String | Ja | Catalogus | ||
unsuccessful | Bevat een array met de namen van de resources voor welke informatie niet succesvol opgehaald kon worden. | Array of String | Ja | Catalogus |
Volledige flow met berichten
In dit voorbeeld wordt de volledige flow inclusief alle berichten als voorbeeld opgenomen. Omdat we niet alle (fout) situaties kunnen voorzien, zal in onderstaand voorbeeld een fictieve fout worden gebruikt.
Voor de verschillende attributen wordt uitgegaan van de volgende variabelen:
Attribuut | Waarde DVP | Waarde DVA |
---|---|---|
location |
|
|
session_id |
| Verschillend per elk request |
trace_id |
|
|
client_id |
|
|
server_id |
|
|
request_id | Uniek voor elk request bericht | |
uri |
| |
provider_id |
| |
response_type | code | |
redirect_uri |
| |
state |
| |
request_type |
| |
grant_type |
| |
initiated_by | person | |
service_id | 49 | |
code | access_denied | |
description | invalid parameter |
Logstap | Omschrijving | DVP | DVA |
---|---|---|---|
1 | DVP initieert een nieuwe uitwisseling |
CODE
| |
2 | DVA ontvangt het request van de DVP en logt het ontvangen van het request. Belangrijk:
|
CODE
| |
3 | Na controle van het binnenkomende verzoek logt de DVA het tonen van de landingspagina aan de deelnemer. Belangrijk:
|
CODE
| |
3a | Indien de DVA constateert dat het ontvangen client_id, trace_id, request_id of redirect_uri invalide is, logt de DVA 2 foutberichten en toont een foutpagina. (er wordt geen response naar de deelnemer gestuurd?). Belangrijk:
|
CODE
| |
3b | Indien de DVA een poging doet een authorization middels oAuth tot stand te brengen en er een fout optreed, logt de DVA deze gebeurtenis. Belangrijk:
|
CODE
| |
4 | De DVA stuurt het verzoek naar de authorization authority. Belangrijk:
|
CODE
| |
4a | Indien de burger op de landing page besluit de authenticatie niet te starten (annuleren), logt de DVA dit. Belangrijk:
|
CODE
| |
5 | De DVA ontvangt het resultaat van de authenticatie en logt dit. Belangrijk:
|
CODE
| |
5a | Indien de gebruiker de authenticatie tijdens het proces annuleert, ontvangt de DVA een cancellation en logt deze gebeurtenis. Belangrijk:
|
CODE
| |
5b | Indien de authenticatie faalt om andere redenen dan cancellation, ontvangt de DVA een error van de DVAuthN en logt de error. Belangrijk:
|
CODE
| |
6 | De DVA logt het versturen van de artifact resolution request naar de DVAuthN. Belangrijk:
|
CODE
| |
7 | De DVA logt het ontvangen van de artifact resolution response van de DVAuthN. Belangrijk:
|
CODE
| |
7a | Indien de DVA een negatief resultaat van de artifact resolution ontvangt, wordt dit gelogd en wordt teven het tonen van de foutpagina gelogd. Dit leidt dus tot 2 events in de logging. Belangrijk:
|
CODE
| |
8 | Zodra de artifact resolution is afgehandeld, wordt de availability check uitgevoerd door de DVA (indien nog niet geauthoriseerd). Belangrijk:
|
CODE
| |
8a | Indien er een fout optreedt als gevolg van beschikbaarheid- en/of ontvankelijkheidstoets, wordt een foutpagina getoond en worden beide events gelogd. Dit leidt dus tot 2 events in de logging. Belangrijk:
|
CODE
| |
9 | De DVA toont vervolgens het toestemmingsscherm voor het vastleggen van de toestemming. Belangrijk:
|
CODE
| |
10 | De DVA logt vervolgens het verkrijgen van toestemming. Belangrijk:
|
CODE
| |
11 | De DVA stuurt vervolgens het resultaat van het authenticatie en authorisatie proces naar de DVP. Het beëindigd hiermee de Authenticatie en Authorisatie fase. Belangrijk:
|
CODE
| |
11a | Indien een gebruiker besluit geen toestemming te verlenen, logt de DVA deze gebeurtenis. De DVA stuurt een aantwoord naar de DVP en logt de gebeurtenis. Belangrijk:
|
CODE
| |
12 | De DVP ontvangt het resultaat van de authenticatie en authorisatie flow en logt deze gebeurtenis. De DVP kan ofwel een positief, danwel een negatief resultaat terugkrijgen van de DVA. Op dit moment logt de DVP alleen het ontvangen van een response. Belangrijk:
|
CODE
| |
13 | Na een succesvolle authenticatie start de DVP met het ophalen van de refresh token bij de token interface. Indien er gebruik gemaakt wordt van langdurige toestemming start het proces in deze stap. Belangrijk:
|
CODE
| |
14 | De DVA logt het ontvangen van de token request en start een nieuwe sessie. Hiervoor genereert het opnieuw een UUIDv4 voor de sessie. Belangrijk:
|
CODE
| |
15 | De DVA voert de availability check uit indien dit nog niet is gedaan (in het geval van langdurige toestemming). Belangrijk:
|
CODE
| |
15a | Bericht is gelijk aan dat van event in logstap 8a. Indien er een fout optreedt als gevolg van beschikbaarheid- en/of ontvankelijkheidstoets, wordt een foutpagina getoond en worden beide events gelogd. Dit leidt dus tot 2 events in de logging. Belangrijk:
|
CODE
| |
16 | De DVA stuurt de token response terug naar de DVP en logt dit bij het logcomponent. Belangrijk:
|
CODE
| |
16a | Tijdens het verkrijgen van de token door de DVA treedt een fout op. De DVA stuurt de response van de fout naar de DVP en logt de gebeurtenis. Belangrijk:
|
CODE
| |
17 | De DVP ontvangt het resultaat van de token refresh flow en logt deze gebeurtenis. De DVP kan ofwel een positief, danwel een negatief resultaat terugkrijgen van de DVA. Op dit moment logt de DVP alleen het ontvangen van een response. De token fase wordt hiermee afgesloten. Belangrijk:
|
CODE
| |
17a | Indien de DVP een error ontvangt doordat de beschikbaarheids of ontvankelijkheidstoets faalt, logt de DVP deze gebeurtenis. Belangrijk:
|
CODE
| |
17b | Indien de DVA een error ontvangt tijdens de token refresh zal de DVP een error bericht van de DVA ontvangen. De DVP logt deze gebeurtenis. |
CODE
| |
18 | Nu alle authenticatie, authorisatie en token processen zijn voltooid, kan de DVP de gegevens opvragen voor de gegevensdiensten bij de betreffende aanbieder. Belangrijk:
|
CODE
| |
19 | De DVA ontvangt het resource verzoek van de DVP en logt dit. Belangrijk:
|
CODE
| |
20 | De DVA voert de availability check uit indien dit nog niet is gedaan (in het geval van langdurige toestemming). Belangrijk:
|
CODE
| |
20a | Indien er een fout optreedt als gevolg van beschikbaarheid- en/of ontvankelijkheidstoets, logt de DVA de fout en logt de DVA tevens dat de fout naar de DVP wordt gestuurd. Dit leidt dus tot 2 events in de logging. Belangrijk:
|
CODE
| |
21 | De DVA logt het resultaat van het ophalen van de informatie bij de aanbieder. Hij geeft hier in 3 arrays aan welke diensten hij succesvol, niet succesvol of waarvoor geen gegevens ontvangen konden worden. Belangrijk:
!In de arrays mag geen gevoelige persoonsinformatie worden opgenomen, ook niet in versleutelde vorm! |
CODE
| |
22 | De DVA stuurt de informatie terug naar de DVP en logt de gebeurtenis. Belangrijk:
|
CODE
| |
22a | Bij het ontvangen van het verzoek van de DVP, constateert de DVA een fout in het verzoek van de DVP. De DVA stuurt een response naar de DVP en logt de gebeurtenis. Belangrijk:
|
CODE
| |
22b | Bij een correct verzoek van de DVP treedt tijdens het verkrijgen van de resources door de DVA een fout op. De DVA stuurt de response van de fout naar de DVP en logt de gebeurtenis. Belangrijk:
|
CODE
| |
23 | De DVP ontvangt de opgevraagde informatie van de aanbieder en logt dit. Hiermee wordt de resource fase afgesloten en daarmee de volledige cyclus in de keten. Belangrijk:
|
CODE
| |
23a | Indien de DVP een error ontvangt doordat de beschikbaarheids of ontvankelijkheidstoets faalt, logt de DVP deze gebeurtenis. https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/resource-interface Belangrijk:
|
CODE
| |
23b | Indien de DVP een error ontvangt doordat de DVA de fouten constateert in het originele verzoek van de DVP, logt hij deze gebeurtenis. https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/resource-interface Omdat het een request error is, moeten de atributen ‘request_id' en 'status’ aan het error object worden toegevoegd. Belangrijk:
|
CODE
| |
23c | Indien de DVP een error ontvangt doordat de DVA de gegevens niet kon ophalen, logt hij deze gebeurtenis. Indien de DVP geen antwoord van de DVA ontvangt, wordt geadviseerd een status 408 te loggen met code “temporarily_unavailable” en description “request timed out” (voorbeeld 2). https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/resource-interface Belangrijk:
|
CODE
CODE
|