Skip to main content
Skip table of contents

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

https://api.medmij.nl/eagleeye/v1/logs

Swagger definitie voor de productie endpoint

https://api.medmij.nl/eagleeye/v1/swagger

Acceptatie endpoint voor de logging service

https://acc-api.medmij.nl/eagleeye/v1/logs

Swagger definitie voor de acceptatie endpoint

https://acc-api.medmij.nl/eagleeye/v1/swagger
Of download de swagger definitie en laad deze in de publieke swagger editor.
Definitie: Swagger Definitie Logcomponent
Swagger editor: https://editor.swagger.io/

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:

CODE
  "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


In dit geval is het tijdstip 7 uur terug ten opzichte van UTC. Servers dienen zo geconfigureerd te zijn om rekening te houden met DST (daylight saving time). In de code dient men altijd de juiste offset te berekenen t.o.v. UTC. Alle ontwikkeltalen kennen methods om dit te doen. Een voorbeeld in .NET is hier te vinden:
https://stackoverflow.com/questions/33636460/how-to-get-the-offset-of-daylight-saving-time-if-applicable

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 (00000000-0000-0000-0000-000000000000)

String (36)

6cc1cd7c-7086-4344-be00-e5c7e4c332bc

36

Ja

Door DVP gegenereerd

Opslagstructuur

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:

CODE
"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:

CODE
"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:

CODE

        "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

send_token_request*

Voorbeeld:

CODE
  "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

receive_token_request*

Voorbeeld:

CODE
  "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

send_resource_request*

Voorbeeld:

CODE
  "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:

CODE
  "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:

CODE
  "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

  • "invalid_scope"

  • "invalid_token"

  • "insufficient_scope"

  • "invalid_request"

  • "invalid_client"

  • "invalid_grant"

  • "unauthorized_client"

  • "unsupported_grant_type"

  • "access_denied"

  • "unsupported_response_type"

  • "server_error"

  • "temporarily_unavailable"

  • "other"

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:

CODE
  "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).

oAuth flow.png

oAoth flow

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:

  • _by_user: bij annuleren door de gebruiker.

  • not_activated: als de app niet geactiveerd is.

  • timeout: als het AuthNRequest van de dienstaanbieder blijkt te zijn verlopen.

  • icon_missing: als het verzoek van de dienstaanbieder geen icon bevat.

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
[{
  "event": {
    "type": "receive_authorization_cancellation",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:27.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  }
}]

not_activated, timeout of icon_missing

5b receive_authentication_error

Description bevat hier de inhoud van de ErrorMessage.

CODE
[{
  "event": {
    "type": "receive_authentication_error",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:27.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "error": {
    "code": "invalid_request",
    "description": ""not_activated", "timeout"" or "icon_missing" or "<inhoud errormessage>"
  }
}]

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:

CODE
  "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

mijn.pgo.nl

api.dva.nl

session_id

c6a27d45-4316-464e-81e0-48d5dbccacbb

Verschillend per elk request

trace_id

79dc6181-6239-4fdd-ad98-594312aeac71

79dc6181-6239-4fdd-ad98-594312aeac71 (ontvangen van DVP)

client_id

mijn.pgo.nl

api.dva.nl

server_id

api.dva.nl

api.dva.nl

request_id

Uniek voor elk request bericht

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

request_type

SAML_assertion

grant_type

authorization_code

initiated_by

person

service_id

49

code

access_denied

description

invalid parameter

Logstap

Omschrijving

DVP

DVA

1

DVP initieert een nieuwe uitwisseling

CODE
[{
	"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"
	}, 
	"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"
	 }
 }]

2

DVA ontvangt het request van de DVP en logt het ontvangen van het request.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP (parameter X-Correlation-ID)

  • location is de eigen location van de DVA

  • request_id wordt overgenomen van het bericht van de DVP

  • session_id wordt door DVA gegenereerd totdat het antwoord op het verzoek van de DVP wordt gegeven.

CODE
[{
	"event": { 
		"type": "receive_authorization_request", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	}, 
	"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"
	 }
 }]

3

Na controle van het binnenkomende verzoek logt de DVA het tonen van de landingspagina aan de deelnemer.

Belangrijk:

  • session_id is gelijk aan het id dat is gegenereerd bij binnenkomst van het verzoek en gelijk aan dat van bericht 2

CODE
[{
	"event": { 
		"type": "show_landing_page", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	}
 }]

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:

  • Op dit moment eindigt de keten. Er wordt geen response event gelogd.

  • Indien het request geen trace_id, request_id of beide bevat, wordt aangeraden voor deze parameters een lege UUIDv4 “00000000-0000-0000-000000000000“ te gebruiken om succesvol het bericht te kunnen loggen bij de logging server.

  • Als er geen client_id beschikbaar is, gebruik dan de waarde "not available"

CODE
[{
	"event": { 
		"type": "authorization_request_error", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "The resource owner or authorization server denied the request",
      "request_id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
      "status": 403
   } 
 },
 {
    "event": { 
		"type": "show_authorization_request_error_page", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "The resource owner or authorization server denied the request",
      "request_id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
      "status": 403
   }
}]

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:

  • Op dit moment eindigt de keten. Er wordt geen response event gelogd.

CODE
[{
	"event": { 
		"type": "send_authorization_request_error", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "invalid_parameter"
      "request_id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488", 
	  "status": 400
   }
}]

4

De DVA stuurt het verzoek naar de authorization authority.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • id is een nieuw UUIDv4 welke door de DVA wordt gegenereerd.

  • client_id is hier de DVA

  • server_id is hier de authorization authority (digid).

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd (in bericht 2).

CODE
[{
	"event": { 
		"type": "send_authentication_request", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},
	"request": { 
		"id": "0312f0d3-ceec-4ffd-970e-2ca429f60a80", 
		"method": "GET", 
		"client_id": "api.dva.nl", 
		"server_id": "digid.nl", 
		"uri": "https://digid.nl/authenticate"
	 }
}]

4a

Indien de burger op de landing page besluit de authenticatie niet te starten (annuleren), logt de DVA dit.

Belangrijk:

  • Op dit moment eindigt de keten. Er wordt geen response gestuurd naar de DVP.

CODE
[{
  "event": {
    "type": "send_authorization_cancellation",
    "location": "api.dva.nl",
    "datetime": "2023-03-28T22:15:55.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  }
}]

5

De DVA ontvangt het resultaat van de authenticatie en logt dit.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • request_id is gelijk aan de id uit het request object van stap 4

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd (in bericht 2).

CODE
[{
  "event": {
    "type": "receive_authentication_response",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:27.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "0312f0d3-ceec-4ffd-970e-2ca429f60a80",
    "status": 200
  }
}]

5a

Indien de gebruiker de authenticatie tijdens het proces annuleert, ontvangt de DVA een cancellation en logt deze gebeurtenis.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "receive_authorization_cancellation",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:27.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  }
}]

5b

Indien de authenticatie faalt om andere redenen dan cancellation, ontvangt de DVA een error van de DVAuthN en logt de error.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "receive_authentication_error",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:27.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "error": {
    "code": "invalid_request",
    "description": ""not_activated", "timeout"" or "icon_missing" or "<inhoud errormessage>""
  }
}]

6

De DVA logt het versturen van de artifact resolution request naar de DVAuthN.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • id is een nieuw UUIDv4 welke door de DVA wordt gegenereerd.

  • client_id is hier de DVA

  • server_id is hier de authorization authority (digid).

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "send_artifact_resolution_request",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:28.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "request": {
    "id": "304bc2aa-b6d8-4ee7-bce8-4d4c2408f1eb",
    "method": "GET",
    "client_id": "api.dva.nl",
    "server_id": "digid.nl",
    "uri": "https://digid.nl/artifactresolution",
    "request_type": "SAML_assertion"
  }
}]

7

De DVA logt het ontvangen van de artifact resolution response van de DVAuthN.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • request_id is gelijk aan het id van het request object van stap 6.

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "receive_artifact_response",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:29.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "304bc2aa-b6d8-4ee7-bce8-4d4c2408f1eb",
    "status": 200
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
	"event": { 
		"type": "receive_artifact_request_error", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "Authorization failed",
      "request_id": "304bc2aa-b6d8-4ee7-bce8-4d4c2408f1eb",
      "status": 403
   } 
 },
 {
    "event": { 
		"type": "show_authentication_error_page", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "Authorization failed",
      "request_id": "304bc2aa-b6d8-4ee7-bce8-4d4c2408f1eb",
      "status": 403
   }
}]

8

Zodra de artifact resolution is afgehandeld, wordt de availability check uitgevoerd door de DVA (indien nog niet geauthoriseerd).

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "result_availability_check",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:29.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

  • Bij description in het error object dient 1 van de volgende waarden te zijn opgenomen: “no_information_available“, "invalid_age" or "blocked"

CODE
[{
	"event": { 
		"type": "availability_check_error", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "no_information_available"
   } 
 },
 {
    "event": { 
		"type": "show_availability_check_error_page", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "no_information_available"
   }
}]

9

De DVA toont vervolgens het toestemmingsscherm voor het vastleggen van de toestemming.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "show_consent_page",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:31.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  }
}]

10

De DVA logt vervolgens het verkrijgen van toestemming.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "receive_consent",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:32.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

  • Het request_id in het response object correspondeert met het originele id uit de request van de DVP.

CODE
[{
  "event": {
    "type": "send_authorization_response",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:33.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
    "status": 200
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

  • Omdat de gebruiker zelf de flow onderbreekt wordt er geen error object meegegeven.

CODE
[{
  "event": {
    "type": "send_authorization_cancellation",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:33.618+01:00",
    "session_id": "c47f3eb8-3a70-4317-87ce-e6d3e3e53167",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  }
}]

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:

  • trace_id bevat de UUID genereert tijdens het starten van de flow.

  • location is de eigen location van de DVP

  • session_id is nog steeds dezelfde als welke is gegenereerd bij het starten van de flow door de DVP.

CODE
[{
  "event": {
    "type": "receive_authorization_response",
    "location": "mijn.pgo.nl",
    "datetime": "2023-09-28T22:14:34.618+01:00",
    "session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "8b5d6cb2-a2c0-4893-bd97-240621c3e488",
    "status": 200   
  }
}]

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:

  • trace_id bevat de UUID genereert tijdens het starten van de flow. Indien het proces hier start genereert de DVP het id op dit moment.

  • location is de eigen location van de DVP

  • session_id is nog steeds dezelfde als welke is gegenereerd bij het starten van de flow door de DVP. Indien het proces hier start genereert de DVP het id op dit moment.

  • grant_type is bij een normale flow “authorization_code“ en bij langdurige toestemming “refresh_token“.

  • initated_by is altijd “person“ tenzij het backchannel (geautomatiseerd verzamelen) betreft, in dat geval bevat het “machine“. Deze wordt alleen door de DVP gelogd.

CODE
[{
  "event": {
    "type": "send_token_request",
    "location": "mijn.pgo.nl",
    "datetime": "2023-09-28T22:14:35.618+01:00",
    "session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "request": {
    "id": "1p5d6cb2-a2c0-4893-bd97-240621c3e582",
    "method": "GET",
    "client_id": "mijn.pgo.nl",
    "server_id": "api.dva.nl",
    "uri": "https://api.dva.nl/2.0.0/token",
    "grant_type": "authorization_code",
    "initiated_by": "person"
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is een nieuwe identifier voor het verwerken van dit request

  • grant_type is bij een normale flow “authorization_code“ en bij langdurige toestemming “refresh_token“.

CODE
[{
  "event": {
    "type": "receive_token_request",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:36.618+01:00",
    "session_id": "d7382884-865e-4185-8347-2c4922d8ef73",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "request": {
    "id": "1p5d6cb2-a2c0-4893-bd97-240621c3e582",
    "method": "GET",
    "client_id": "mijn.pgo.nl",
    "server_id": "api.dva.nl",
    "uri": "https://api.dva.nl/2.0.0/token",
    "grant_type": "authorization_code",
  }
}]

15

De DVA voert de availability check uit indien dit nog niet is gedaan (in het geval van langdurige toestemming).

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "result_availability_check",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:29.618+01:00",
    "session_id": "d7382884-865e-4185-8347-2c4922d8ef73",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

  • Bij description in het error object dient 1 van de volgende waarden te zijn opgenomen: “no_information_available“, "invalid_age" or "blocked"

CODE
[{
	"event": { 
		"type": "availability_check_error", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "d7382884-865e-4185-8347-2c4922d8ef73", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "no_information_available"
   }
 }.
 {
    "event": { 
		"type": "send_availability_check_error", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "d7382884-865e-4185-8347-2c4922d8ef73", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "no_information_available"
   }
}]

16

De DVA stuurt de token response terug naar de DVP en logt dit bij het logcomponent.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "send_token_response",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:38.618+01:00",
    "session_id": "d7382884-865e-4185-8347-2c4922d8ef73",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "1p5d6cb2-a2c0-4893-bd97-240621c3e582",
    "status": 200
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

  • request_id is gelijk aan het id in het request object van de DVP, als er geen request_id beschikbaar is, gebruik dan een lege UUIDv4 (00000000-0000-0000-0000-000000000000).

  • status: De HTTP status code van de response.

CODE
[{
  "event": {
    "type": "send_token_request_error",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:38.618+01:00",
    "session_id": "d7382884-865e-4185-8347-2c4922d8ef73",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "error": {
    "code": "invalid_request",
    "description": "missing parameter" or "invalid parameter" or "parameter is malformed",
    "request_id": "1p5d6cb2-a2c0-4893-bd97-240621c3e582",
    "status": 400
  }
}]

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:

  • trace_id bevat de UUID genereert tijdens het starten van de flow

  • location is de eigen location van de DVP

  • session_id is nog steeds dezelfde als welke is gegenereerd bij het starten van de flow door de DVP.

CODE
[{
  "event": {
    "type": "receive_token_response",
    "location": "mijn.pgo.nl",
    "datetime": "2023-09-28T22:14:39.618+01:00",
    "session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "1p5d6cb2-a2c0-4893-bd97-240621c3e582",
    "status": 200
  }
}]

17a

Indien de DVP een error ontvangt doordat de beschikbaarheids of ontvankelijkheidstoets faalt, logt de DVP deze gebeurtenis.

Belangrijk:

  • trace_id bevat de UUID genereert tijdens het starten van de flow

  • location is de eigen location van de DVP

  • session_id is nog steeds dezelfde als welke is gegenereerd bij het starten van de flow door de DVP.

  • Bij description in het error object dient 1 van de volgende waarden te zijn opgenomen: “no_information_available“, "invalid_age" or "blocked", afhankelijk van de error in de response van de DVA

CODE
[{
	"event": { 
		"type": "receive_availability_check_error", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "no_information_available"
   } 
 }]

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
[{
  "event": {
    "type": "receive_token_request_error",
    "location": "mijn.pgo.nl",
    "datetime": "2023-09-28T22:14:39.618+01:00",
    "session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "error": {
    "code": "invalid_grant",
    "description": "refresh_token invalid"
    "request_id": "1p5d6cb2-a2c0-4893-bd97-240621c3e582"
    "status": 400
  }
}]

18

Nu alle authenticatie, authorisatie en token processen zijn voltooid, kan de DVP de gegevens opvragen voor de gegevensdiensten bij de betreffende aanbieder.

Belangrijk:

  • trace_id bevat de UUID genereert tijdens het starten van de flow.

  • location is de eigen location van de DVP

  • session_id is nog steeds dezelfde als welke is gegenereerd bij het starten van de flow door de DVP.

  • provider_id bevat de dienstverlener welke de betreffende gegevensdienst aanbiedt.

  • service_id is het uniek identificerende kenmerk van een gegevensdienst, zoals genoemd in de catalogus voor gegevensdiensten.

CODE
[{
  "event": {
    "type": "send_resource_request",
    "location": "mijn.pgo.nl",
    "datetime": "2023-09-28T22:14:40.618+01:00",
    "session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "request": {
    "id": "5w5d6cb2-a2c0-4893-bd97-240621c3e279",
    "method": "GET",
    "client_id": "mijn.pgo.nl",
    "server_id": "api.dva.nl",
    "uri": "https://api.dva.nl/2.0.0/resource",
    "provider_id": "een.huisarts@medmij",
    "service_id": 49
  }
}]

19

De DVA ontvangt het resource verzoek van de DVP en logt dit.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is een nieuwe identifier na ontvangst van het request van de DVP.

  • provider_id bevat de dienstverlener welke de betreffende gegevensdienst aanbiedt.

  • service_id is het uniek identificerende kenmerk van een gegevensdienst, zoals genoemd in de catalogus voor gegevensdiensten.

CODE
[{
  "event": {
    "type": "receive_resource_request",
    "location": "api.as.dva.nl",
    "datetime": "2023-09-28T22:14:41.618+01:00",
    "session_id": "58ba44c6-a16c-4f37-88bb-3b728c2bd17b",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac711"
  },
  "request": {
    "id": "5w5d6cb2-a2c0-4893-bd97-240621c3e279",
    "method": "GET",
    "client_id": "mijn.pgo.nl",
    "server_id": "api.dva.nl",
    "uri": "https://api.as.dva.nl/2.0.0/resource",
    "provider_id": "een.huisarts@medmij",
    "service_id": 49    
  }
}]

20

De DVA voert de availability check uit indien dit nog niet is gedaan (in het geval van langdurige toestemming).

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "result_availability_check",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:42.618+01:00",
    "session_id": "58ba44c6-a16c-4f37-88bb-3b728c2bd17b",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac711"
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

  • Bij description in het error object dient 1 van de volgende waarden te zijn opgenomen: “no_information_available“, "invalid_age" or "blocked"

CODE
[{
  "event": {
    "type": "availability_check_error",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:42.618+01:00",
    "session_id": "58ba44c6-a16c-4f37-88bb-3b728c2bd17b",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
},  
	"error": {
      "code": "access_denied",
      "description": "no_information_available"
   }
},
{
  "event": {
    "type": "send_availability_check_error",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:43.618+01:00",
    "session_id": "58ba44c6-a16c-4f37-88bb-3b728c2bd17b",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },  
	"error": {
      "code": "access_denied",
      "description": "no_information_available"
   }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

  • Het “Information“ object bevat 3 arrays met de namen van de opgehaalde ZIB’s.

!In de arrays mag geen gevoelige persoonsinformatie worden opgenomen, ook niet in versleutelde vorm!

CODE
[{
  "event": {
    "type": "result_gathering_information",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:43.618+01:00",
    "session_id": "58ba44c6-a16c-4f37-88bb-3b728c2bd17b",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "information": {
    "successful": ["Composition","Encounter","EpisodeOfCare","MedicationRequest","Patient"],
    "empty":  ["AllergyIntolerance","Observation"],
    "unsuccessful": ["Observation"]
  }
}]

22

De DVA stuurt de informatie terug naar de DVP en logt de gebeurtenis.

Belangrijk:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

CODE
[{
  "event": {
    "type": "send_resource_response",
    "location": "api.as.dva.nl",
    "datetime": "2023-09-28T22:14:44.618+01:00",
    "session_id": "58ba44c6-a16c-4f37-88bb-3b728c2bd17b",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "5w5d6cb2-a2c0-4893-bd97-240621c3e279",
    "status": 200
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

  • request_id is gelijk aan het id in het request object van de DVP, als er geen request_id beschikbaar is, gebruik dan een lege UUIDv4 (00000000-0000-0000-0000-000000000000).

CODE
[{
  "event": {
    "type": "send_resource_request_error",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:44.618+01:00",
    "session_id": "58ba44c6-a16c-4f37-88bb-3b728c2bd17b",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "error": {
    "code": "invalid_request",
    "description": "missing parameter" or "malformed parameter",
    "request_id": "5w5d6cb2-a2c0-4893-bd97-240621c3e279",
    "status": 400
  }
}]

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:

  • trace_id wordt overgenomen van het bericht van de DVP

  • location is de eigen location van de DVA

  • session_id is nog steeds dezelfde als welke tijdens de ontvangst van het request van de DVP is gegenereerd.

  • request_id is gelijk aan het id in het request object van de DVP; als er geen request_id beschikbaar is, gebruik dan een lege UUIDv4 (00000000-0000-0000-0000-000000000000).

  • code (in het error object) kan hier de waardes “invalid_scope”, “invalid_token” of “insufficient_scope” hebben, zoals beschreven in https://datatracker.ietf.org/doc/html/rfc6750#section-6.2 .

CODE
[{
  "event": {
    "type": "send_resource_error_response",
    "location": "api.dva.nl",
    "datetime": "2023-09-28T22:14:44.618+01:00",
    "session_id": "58ba44c6-a16c-4f37-88bb-3b728c2bd17b",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "5w5d6cb2-a2c0-4893-bd97-240621c3e279",
    "status": 400
  },
  "error": {
    "code": "invalid_scope",
    "description": "Vrije text"
  }
}]

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:

  • trace_id bevat de UUID genereert tijdens het starten van de flow.

  • location is de eigen location van de DVP

  • session_id is nog steeds dezelfde als welke is gegenereerd bij het starten van de flow door de DVP. De sessie wordt beeindigd zodra de gebruiker uitlogt of gedwongen wordt uitgelogd.

CODE
[{
  "event": {
    "type": "receive_resource_response",
    "location": "mijn.pgo.nl",
    "datetime": "2023-09-28T22:14:45.618+01:00",
    "session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "5w5d6cb2-a2c0-4893-bd97-240621c3e279",
    "status": 200
  }
}]

23a

Indien de DVP een error ontvangt doordat de beschikbaarheids of ontvankelijkheidstoets faalt, logt de DVP deze gebeurtenis.
De DVA stuurt conform de resource interface specificatie, resource interface 5 een http status 403 met een error attribuut “access_denied“ terug.

https://afsprakenstelsel.medmij.nl/asverplicht/mmverplicht/resource-interface

Belangrijk:

  • trace_id bevat de UUID genereert tijdens het starten van de flow

  • location is de eigen location van de DVP

  • session_id is nog steeds dezelfde als welke is gegenereerd bij het starten van de flow door de DVP.

  • Bij description in het error object dient 1 van de volgende waarden te zijn opgenomen: “no_information_available“, "invalid_age" or "blocked", afhankelijk van de error in de response van de DVA.

CODE
[{
	"event": { 
		"type": "receive_availability_check_error", 
		"location": "api.dva.nl", 
		"datetime": "2023-03-28T22:14:23.618+01:00", 
		"session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb", 
		"trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
	},  
	"error": {
      "code": "access_denied",
      "description": "no_information_available"
   } 
 }]

23b

Indien de DVP een error ontvangt doordat de DVA de fouten constateert in het originele verzoek van de DVP, logt hij deze gebeurtenis.
De DVA stuurt conform de resource interface specificatie, resource interface 4 een http status 400 met een error attribuut “invalid_request“ terug.

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:

  • trace_id bevat de UUID genereert tijdens het starten van de flow

  • location is de eigen location van de DVP

  • session_id is nog steeds dezelfde als welke is gegenereerd bij het starten van de flow door de DVP.

CODE
[{
  "event": {
    "type": "receive_resource_request_error",
    "location": "mijn.pgo.nl",
    "datetime": "2023-09-28T22:14:39.618+01:00",
    "session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "error": {
    "code": "invalid_request",
    "description": "vrij veld",
    "request_id": "5w5d6cb2-a2c0-4893-bd97-240621c3e279",
    "status": 400
  }
}]

23c

Indien de DVP een error ontvangt doordat de DVA de gegevens niet kon ophalen, logt hij deze gebeurtenis.
De DVA stuurt conform de resource interface specificatie, resource interface 6 een http status anders dan bovenstaande met bijbehorend error attribuut.

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:

  • trace_id bevat de UUID genereert tijdens het starten van de flow

  • location is de eigen location van de DVP

  • session_id is nog steeds dezelfde als welke is gegenereerd bij het starten van de flow door de DVP

CODE
[{
  "event": {
    "type": "receive_resource_error_response",
    "location": "mijn.pgo.nl",
    "datetime": "2023-09-28T22:14:39.618+01:00",
    "session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "5w5d6cb2-a2c0-4893-bd97-240621c3e279",
    "status": 400
  },
  "error": {
    "code": "de code in het bericht van de DVA",
    "description": "de omschrijving in het bericht van de DVA"
  }
}]

CODE
[{
  "event": {
    "type": "receive_resource_error_response",
    "location": "mijn.pgo.nl",
    "datetime": "2023-09-28T22:14:39.618+01:00",
    "session_id": "c6a27d45-4316-464e-81e0-48d5dbccacbb",
    "trace_id": "79dc6181-6239-4fdd-ad98-594312aeac71"
  },
  "response": {
    "request_id": "5w5d6cb2-a2c0-4893-bd97-240621c3e279",
    "status": 408
  },
  "error": {
    "code": "temporarily_unavailable",
    "description": "request timed out"
  }
}]

Bron: MMKML-70: Implementatie Handleiding Ketenlogging

JavaScript errors detected

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

If this problem persists, please contact our support.