Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

1.Eigenaar MedMij neemt de functionele rol van MedMij Beheer op zich. Er is één Eigenaar MedMij die één MedMij Beheer speelt.

Anchor
core.rollen.100
core.rollen.100
core.rollen.100

2.Een Deelnemer neemt de functionele rol van Dienstverlener persoon en/of Dienstverlener aanbieder op zich. Hierbij speelt één Deelnemer één of meerdere dienstverleners en wordt elke dienstverlener gespeeld door één Deelnemer.

Anchor
core.rollen.101
core.rollen.101
core.rollen.101

3.

Dienstverlener persoon biedt aan Persoon, in het kader van de toepasselijke Dienstverleningsovereenkomst, een geautomatiseerde rol ter gebruik, hier genoemd: DVP Server. Eén Dienstverlener persoon biedt één of meerdere DVP Servers en elke DVP Server wordt door één Dienstverlener persoon geboden.

Anchor
core.rollen.200
core.rollen.200
core.rollen.200

4.

Dienstverlener aanbieder biedt een geautomatiseerde rol Authorization Server, voor het namens Aanbieders uitwisselen van gezondheidsinformatie met DVP Server. Deze rol wordt altijd in combinatie met een Resource Server.

Anchor
core.rollen.201
core.rollen.201
core.rollen.201

5.

Dienstverlener aanbieder biedt een geautomatiseerde rol Resource Server, voor het namens Aanbieders uitwisselen van gezondheidsinformatie met DVP Server. Eén Dienstverlener aanbieder biedt één of meer combinaties van één Authorization Server en één Resource Server en elke combinatie van één Authorization Server en één Resource Server wordt door één Dienstverlener aanbieder geboden.

Anchor
core.rollen.202
core.rollen.202
core.rollen.202

6.Persoon gebruikt één geautomatiseerde rol User Agent voor toegang tot de functionaliteit van DVP Server en Authorization Server. User Agentpresenteert de functionaliteit aan Persoon, spreekt DVP Server aan en verwijst de Persoon naar de Authorization Server.

Anchor
core.rollen.203
core.rollen.203
core.rollen.203

7.MedMij Beheer ontsluit ten behoeve van alle betrokkenen een geautomatiseerde rol, hier genoemd: MedMij Registratie.

Anchor
core.rollen.204
core.rollen.204
core.rollen.204

8.Ten behoeve van het authenticeren van Persoon, zal de betrokken Authorization Server, in de rol van Authentication Client, gebruikmaken van de Authentication Server van een Dienstverlener authenticatie.

Anchor
core.rollen.205
core.rollen.205
core.rollen.205

9.

Ten behoeve van het autoriseren van DVP Server voor toegang tot Resource Server, in het kader van de functies Verzamelen en Delen, zullen de betrokken User Agent, DVP Server, Authorization Server en Resource Server gebruik maken van OAuth 2.0, waarbij als grant type gebruik wordt gemaakt van Authorization Code en waarbij:

    1. de rol van OAuth Resource Owner wordt verzorgd door de Persoon;
    2. de rol van OAuth Client wordt verzorgd door de DVP Server;
    3. de rol van OAuth Resource Server wordt verzorgd door de Resource Server;
    4. de rol van OAuth Authorization Server wordt verzorgd door de Authorization Server.
Expand
titleToelichting

De keuze, in OAuth, voor de grant type Authorization Code past bij de typische software-architectuur die in MedMij in het Persoonsdomein wordt aangetroffen: toegang tot een PGO-dienst via componenten die niet onder controle van de OAuth Client vallen en als betrekkelijk onveilig moeten worden gezien.


Anchor
core.rollen.206
core.rollen.206
core.rollen.206

10.

Als MedMij-verkeer is gedefinieerd: al het gegevensverkeer in het kader van enige usecase-implementatie, onmiddellijk tussen twee verschillende van de vier volgende soorten rollen, namelijk:

met dien verstande dat:

  • in deze rollen telkens begrepen zijn de door hen eventueel verzorgde respectievelijke Autorisatie-rollen, 
  • van deze rollen telkens uitgesloten zijn de door hen eventueel verzorgde Authenticatie-rollen, en
  • in deze rollen, met betrekking tot de usecase-implementaties, telkens inbegrepen zijn de Nodes waarop zij functioneren.

Anchor
core.rollen.207
core.rollen.207
core.rollen.207

11.
In het MedMij-netwerk functioneert:
  • iedere rol uit de applicatie-laag op één of meer Frontchannel en/of Backchannel Nodes, met uitzondering van:
    • Voor al diens frontchannel-verkeer gebruikt elke DVP Server één Frontchannel Node, en wel met een hostname die voor die DVP Server voorkomt op de OAuth Client List.
    • MedMij Registratie functioneert op precies één node, welke bekend staat onder de naam 'Stelselnode'. Zonder de MedMij Stelselnode is er geen MedMij-netwerk.
Expand
titleToelichting

Het is toegestaan om een Authorization Server en een Resource Server te verdelen over verschillende Nodes, maar ook te combineren op dezelfde. De afsprakenset staat het zelfs toe dat Authorization Server en Resource Server elk apart op meerdere Nodes worden geprojecteerd. Het kan dan voorkomen dat, bij de betreffende AanbiederGegevensdiensten in de Aanbiederslijst, hostnames in de endpointadressen staan die verschillen tussen het authorization endpoint, het token endpoint en het resource endpoint, zelfs bij eenzelfde Interfaceversie. Een belangrijke eis blijft evenwel dat al deze hostnames bij Nodes van eenzelfde Dienstverlener aanbieder horen. De hele flow behorend bij een zekere AanbiederGegevensdienst moet namelijk onder de eindverantwoordelijkheid van één zo'n Dienstverlener vallen, namelijk van de Dienstverlener die die AanbiederGegevensdienst ontsluit. Zo blijft die integrale eindverantwoordelijk­heid ook op net­werk-niveau toetsbaar. Zie de drie (ingewikkelde) invarianten bij Aanbie­derGegevensdienst van het soort “niet-lokale afhankelijkheid”.

De uitzondering daarop inzake het frontchannel-verkeer is noodzakelijk om de OAuth Client List te laten functioneren. Het is dus mogelijk voor een DVP Server om verschillende certificaten te hanteren voor frontchannel- en backchannel-verkeer, zolang op de OAuth Client List maar de hostname in het certificaat voor frontchannelverkeer voorkomt die tevens voorkomt in de redirect URI inzake OAuth.


In het Aanbiedersdomein treden alleen de Nodes op in het MedMij-netwerk. Dat wil zeggen dat bijvoorbeeld achterliggende xIS'en niet over het MedMij-netwerk communiceren met de Node. Dat verkeer is verborgen achter de Node. Alle daarvoor benodigde routering wordt afgehandeld door de server-implementaties en speelt zich buiten het zicht van het MedMij Afsprakenstelsel af.


Anchor
core.rollen.300
core.rollen.300
core.rollen.300

12.
Op één Node functioneert hetzij één Authorization Server, hetzij één Resource Server, hetzij een combinatie van voorgaande rollen.

Anchor
core.rollen.301
core.rollen.301
core.rollen.301

...

1.

MedMij Beheer beheert en publiceert een Aanbiederslijst, namens de deelnemende Dienstverlener aanbieder. De gepubliceerde Aanbiederslijst bevat steeds en slechts alle actuele entries, en beschrijft van elke Aanbieder:

  • welke Gegevensdiensten deze momenteel aanbiedt, en welke technische adressen daarvoor moeten worden aangesproken bij de Dienstverlener aanbieder, gegeven een zekere Interfaceversie;
Note

De technische adressen van een Dienstverlener aanbieder moeten uniek zijn per gegevensdienst. Bij ieder verzoek vanuit een Dienstverlener persoon kan de Dienstverlener aanbieder hiermee eenvoudig bepalen welke gegevensdienst wordt opgevraagd.Zie core.gegevensdiensten.201 voor de verantwoordelijkheden betreffende technische adressen.


Expand
titleToelichting

Deze afspraak wijst MedMij Beheer de verantwoordelijkheid toe om ten behoeve van alle Dienstverleners persoon een lijst te verspreiden van Aanbieders en de door hen aangeboden Gegevensdiensten. Zonder deze functie zou het stelsel niet functioneren.


Anchor
core.alst.100
core.alst.100
core.alst.100

2.

MedMij Beheer beheert en publiceert, in de Aanbiederslijst, unieke en gebruikersvriendelijke namen van Aanbieders, van het formaat <aanbieder>@medmij. Daarop is naamgevingsbeleid van toepassing.

Expand
titleToelichting
Aanbieders kunnen in hun directe of indirecte contact met Personen deze naam meegeven als hun "MedMij-naam". MedMij Beheer zorgt voor uniciteit en heeft het laatste woord bij het vaststellen ervan.


Anchor
core.alst.101
core.alst.101
core.alst.101

3.MedMij Beheer biedt aan Dienstverleners persooneen functie (Opvragen Aanbiederslijst) om de actuele versie van die Aanbiederslijst op te vragen. Betrokken rollen gebruiken hiertoe het betreffende stroomdiagram.

Anchor
core.alst.102
core.alst.102
core.alst.102

4.MedMij Registratie en elke DVP Server implementeren de functie Opvragen Aanbiederslijst, door middel van het bepaalde inzake het Aanbiederslijstinterface op Interfaces lijsten. Zij gebruiken hiertoe het betreffende stroomdiagram.

Anchor
core.alst.200
core.alst.200
core.alst.200

5.DVP Server betrekt minstens elke vijftien minuten (900 seconden) de meest recente Aanbiederslijst van MedMij Registratie.

Anchor
core.alst.201
core.alst.201
core.alst.201

6.DVP Server valideert elke nieuw verkregen Aanbiederslijst tegen het XML-schema van de Aanbiederslijst.

Anchor
core.alst.202
core.alst.202
core.alst.202

...

Zo wordt geborgd dat de juiste functie-implementaties en informatiestandaarden worden gebruikt. Ook wordt het correcte gebruik geborgd, wat bijdraagt aan interoperabiliteit en vertrouwen
1.

Dienstverlener persoon laat Persoon met een Gegevensdienst uit de Gegevensdienstnamenlijst gezondheidsinformatie verzamelen bij een Dienstverlener aanbieder of, ten behoeve van een Aanbieder, plaatsen bij een Dienstverlener aanbieder.

Expand
titleToelichting

Een Gegevensdienst is een op een specifieke en gestandaardiseerde set gezondheidsinformatie gerichte dienst waarmee Dienstverlener aanbieder zulke informatie ontsluit naar Dienstverlener persoon in het kader van de functie Verzamelen of Dienstverlener aanbieder zulke informatie geplaatst krijgt ten behoeve van een Aanbieder. In de Gegevensdienstnamenlijst zijn de Gegevensdiensten opgenomen die op enig moment worden aangeboden, maar de Catalogus is de autoriteit daarvoor.


Anchor
core.gegevensdiensten.100
core.gegevensdiensten.100
core.gegevensdiensten.100

2.

Elke Dienstverlener aanbieder ontsluit op elk moment minstens één Gegevensdienst.

Expand
titleToelichting

Het ontsluiten van een Gegevensdienst door een Dienstverlener aanbieder is, in deze versie van het MedMij Afsprakenstelsel, hetzij in het kader van Verzamelen of in het kader van Delen van zekere gezondheidsinformatie. De term 'ontsluiten' wordt hier gebruikt in plaats van de term 'aanbieden', omdat als aanbieder van een Gegevensdienst de Aanbieder wordt gezien, niet de Deelnemer (Dienstverlener aanbieder). De Deelnemer ontsluit de Gegevensdienst dus namens de Aanbieder die die Gegevensdienst aanbiedt.

De termen 'aanbieden' en 'ontsluiten' vertegenwoordigen een tweedeling in de verantwoordelijkheid voor een geleverde Gegevensdienst. De Aanbieder is, ook als verwerkingsverantwoordelijke in de zin der AVG, verantwoordelijk voor het aanbieden van een Gegevensdienst aan de Dienstverlener persoon; de Dienstverlener aanbieder is, ook als verwerker in de zin der AVG, verantwoordelijk voor het ontsluiten van diezelfde Gegevensdienst aan diezelfde Dienstverlener persoon. Aanbieden en ontsluiten zijn dus niet achter elkaar geschakeld: de Aanbieder biedt de Gegevensdienst niet zozeer aan de Dienstverlener aanbieder aan, maar aan de Dienstverlener persoon. Aanbieden en ontsluiten zijn aspecten van eenzelfde geleverde Gegevensdienst: het eerste het verwerkingsverantwoordelijke, het tweede het verwerkende.


Anchor
core.gegevensdiensten.101
core.gegevensdiensten.101
core.gegevensdiensten.101

3.

MedMij Beheer zal alleen in de Aanbiederslijst opnemen dat een zekere Gegevensdienst door een zekere Aanbieder via een Dienstverlener aanbiederwordt aangeboden, indien zij (Stichting MedMij) heeft vastgesteld dat de Dienstverlener aanbieder voldoet aan de specifiek op die Gegevensdienst toepas­selij­ke eisen.

Expand
titleToelichting
Omdat er een indirectie speelt, via de Dienstverlener aanbieder naar de Aanbieder, moet gezegd worden dat één Aanbieder genoeg is (die een bepaalde Gegevensdienst ontsluit) om ervoor te zorgen dat de Dienstverlener aanbieder zich voor die Informatiestandaard moet kwalificeren in het MedMij Afsprakenstelsel.


Anchor
core.gegevensdiensten.102
core.gegevensdiensten.102
core.gegevensdiensten.102

4.

Voor elke Gegevensdienst waarvan de Aanbiederslijst aan­geeft dat een zekere Aanbieder deze aanbiedt, zal een Dienstverlener aanbieder ervoor zorgdragen dat die Gegevensdienst ook geleverd wordt. Daarbij wordt geen enkel onderscheid gemaakt tussen Dienstverleners persoon, tenzij het MedMij Afsprakenstelsel daartoe uitdrukkelijk verplicht. Dit geldt ook voor de mogelijke andere Gegevensdienst(en) die in de /wiki/spaces/MMCatalogus/overview staan genoemd als Vereist bij eerstgenoemde Gegevensdienst.

Expand
titleToelichting
Net als verantwoordelijkheid core.gegevensdiensten.102, moet ook vanuit deze verantwoordelijkheid rekening houden met de indirectie via Dienstverlener aanbieder naar de Aanbieder zelf. Deze regel legt het bij de Dienstverlener aanbieder om ervoor zorg te dragen dat de Aanbieder met wie hij een dienstverleningsovereenkomst heeft, ook de Gegevensdienst levert die hij toegezegd heeft.


Anchor
core.gegevensdiensten.103
core.gegevensdiensten.103
core.gegevensdiensten.103

5.

Het in verantwoordelijkheid core.gegevensdiensten.103 bepaalde is ook van toepassing zolang de geldigheid van de toepasselijke vermelding in de Aanbiederslijst niet langer dan één uur (3600 seconden) geleden is verstreken.

Expand
titleToelichting
Zo wordt ervoor ruimte geboden dat na-ijlende sessies, die nog gebruik maken van de verstrijkende versie van de Aanbiederslijst, nog kunnen worden afgemaakt.


Anchor
core.gegevensdiensten.104
core.gegevensdiensten.104
core.gegevensdiensten.104

6.

Als een Dienstverleners persooneen zekere Gegevensdienst ontsluit ten behoeve van zijn Personen en daartoe laat leveren door een Dienstverlener aanbieder, zullen de DVP Servervan die Dienstverlener persoonen de Authorization Serveren Resource Servervan die Dienstverlener aanbiederdaarvoor de bij de Gegevensdienst horende functie implementeren en de bij de Gegevensdienst horende Systeemrollen gebruiken, zoals deze in de Catalogus zijn opgenomen, en zich daarbij te conformeren aan de specificaties van die Systeemrollen zoals die zijn gepubliceerd op de plaats(en) waarnaar de Catalogus verwijst met Functionelespecificatieverwijzing en Technischespecificatieverwijzing.


Anchor
core.gegevensdiensten.200

Expand
titleToelichting

core.gegevensdiensten.200
core.gegevensdiensten.200

7.Voor iedere gegevensdienst moet de Dienstverlener aanbieder een unieke endpoint voor de Resource Server registreren in MedMij Registratie.

Anchor
core.gegevensdiensten.200201
core.gegevensdiensten.200201
core.gegevensdiensten.200201

Autorisatie

1.

Dienstverlener aanbieder vergewist zich ervan, elke keer opnieuw voordat hij Persoon gezondheidsinformatie van Aanbieder laat verzamelen door middel vande functie Verzamelen, dat deze Persoon uitdrukkelijk Toestemming heeft gegeven aan Aanbieder  om de in de Gegevensdienst betrokken gezondheidsinformatie aan Dienstverlener persoon ter beschikking te laten stellen. De vraag om Toestemming heeft een vaste formulering, die is opgenomen in de functie Verzamelen. Deze Toestemming is slechts van kracht binnen één doorloping van de usecase.

Expand
titleToelichting
Het is dus de Dienstverlener aanbieder die de Toestemming ophaalt bij de Persoon. De tweede zin van deze verantwoordelijkheid maakt de toestemming functioneel zo eenvoudig mogelijk, omdat in deze release van het MedMij Afsprakenstelsel alleen met een eenmalige vraag gezondheidsinformatie verzameld kan worden. De toestemming, hoe expliciet ook, heeft precies dezelfde reikwijdte als die eenmalige vraag.


Anchor
core.autorisatie.100
core.autorisatie.100
core.autorisatie.100

2.

Dienstverlener aanbieder vergewist zich ervan, elke keer opnieuw voordat hij Persoon gezondheidsinformatie ten behoeve van Aanbieder laat plaatsen, dat deze Persoon uitdrukkelijk heeft bevestigd om de in de Gegevensdienst betrokken gezondheidsinformatie aan Aanbieder ter beschikking te willen stellen. De vraag om Bevestiging heeft een vaste formulering, die is opgenomen in de functie Delen. Deze bevestiging geldt niet buiten één doorloping van de functie Delen.

Expand
titleToelichting
Deze verantwoordelijkheid is welbewust niet geïntegreerd met verantwoordelijkheid 1 omdat de hier bedoelde bevestiging niet de juridische status heeft van de in verantwoordelijkheid 1 bedoelde Toestemming.


Anchor
core.autorisatie.101
core.autorisatie.101
core.autorisatie.101

3.

In de implementatie van de functies Verzamelen en Delen handelen DVP Server enerzijds en Authorization Serveren Resource Server anderzijds, hun onderlinge verkeer af conform de standaard OAuth 2.0.

Expand
titleToelichting

Conform wettelijke verplichting geeft Persoon, in de functie Verzamelen, actief toestemming aan de Aanbieder. In de functie Delen is deze verplichting niet aan de orde, maar vindt op dit moment evengoed een bevestiging door de Persoon plaats. De User Agentpresenteert een venster waarin de Persoon deze toestemming, respectievelijk bevestiging, kan geven. Aangezien in het persoonsdomein niet met BSN gewerkt mag worden, moet er een vervangende identificatie van de Persoon gebruikt worden.


Anchor
core.autorisatie.200
core.autorisatie.200
core.autorisatie.200

4.

Van de vier soorten authorization grants die OAuth 2.0 biedt, beperken de OAuth-rollen zich tot Authorization Code.

Expand
titleToelichting

Met deze ene soort kunnen alle situaties die in het MedMij Afsprakenstelsel voorkomen worden bediend. Voor het maximaliseren van de interoperabiliteit kiest MedMij ervoor de andere drie soorten uit te sluiten.


Anchor
core.autorisatie.201
core.autorisatie.201
core.autorisatie.201

5.

De OAuth Client en OAuth Resource Server zullen slechts tokens van het type Bearer-token uitwisselen, conform RFC6750.

Expand
titleToelichting

De OAuth-standaard laat het (access) token type vrij. Token types verschillen in het vertrouwen waarmee de OAuth Resource Server aan de OAuth Client de gevraagde resources kan prijsgeven als laatstgenoemde het access-token aan eerstgenoemde overlegt. Bij de eenvoudigste vorm (bearer-token) geeft de OAuth Resource Server eenvoudigweg aan elke OAuth Client die een geldig access-token overlegt, de resources die daarbij horen. "Aan toonder", net zoals een bank een cheque kan verzilveren aan toonder. Daaraan kleven evenwel veiligheidsrisico's, omdat het access-token na uitgifte gestolen kan zijn, of anderszins vervreemd van de OAuth Client aan wie het uitgedeeld was. Andere token types kunnen daarom vragen om meer garanties, zoals een identiteit van de OAuth Client of een client-secret. Bearer-token is echter het enige goed gestandaardiseerde en breed gebruikte token type. Het legt wel veel verantwoordelijkheid voor beheersing van de veiligheidsrisico's bij OAuth Client en OAuth Authorization Server. In hoofdstuk 5 van de specificatie van de standaard RFC6750 is daarom expliciete aandacht voor die beveiligingsrisico's en maatregelen om die het hoofd te bieden.


Anchor
core.autorisatie.202
core.autorisatie.202
core.autorisatie.202

6.

De OAuth Client maakt alleen gebruik van één scope tegelijk. De OAuth Authorization Server genereert authorization-codes en access-tokens met een enkelvoudige scope die geheel vervat moet zijn in de Gegevensdienst waarom de OAuth Client heeft gevraagd.

Expand
titleToelichting

Bij het genereren van codes en tokens is de OAuth-scope meegenomen. Deze is gerelateerd aan de Gegevensdienst. Hoewel het technisch mogelijk is om meerdere scopes mee te geven is de scope beperkt tot één Gegevensdienst per keer.


Anchor
core.autorisatie.203
core.autorisatie.203
core.autorisatie.203

7.

De OAuth Authorization Server stelt van elke uitgegeven authorization-code en elk uitgegeven access-token de geldigheidsduur op exact 15 minuten (900 seconden). Zij geeft bovendien geen refresh-tokens uit.

Expand
titleToelichting

Dit is een maatregel tegen de beveiligingsrisico's 4.4.1.1 en 4.4.1.3 uit RFC 6819. Bovendien wordt de hele flow van de functie Verzamelen ononderbroken uitgevoerd. De 900 seconden moeten dan voldoende zijn voor de OAuth Client om het access-token aan de OAuth Authorization Server aan te bieden. Een refresh-token is dan niet nodig.


Anchor
core.autorisatie.204
core.autorisatie.204
core.autorisatie.204

8.De OAuth Authorization Server genereert authorization-codes en access-tokens zodanig, dat de kans op het raden ervan niet groter is dan 2-128 en de daarvoor gebruikte random number generators cryptografisch veilig zijn.

Anchor
core.autorisatie.205
core.autorisatie.205
core.autorisatie.205

7.In de authorization-codes en access-tokens is het desgewenst toegestaan één of meer van de informatie-elementen uit de volgende limitatieve lijst op te nemen:
  • een identifier van de authorization-code, respectievelijk het access-token, indien die identifier op zichzelf voldoet aan de in verantwoordelijkheid 6 genoemde eisen;
  • een verloopmoment van de geldigheid van het token, onder de voorwaarden dat zowel:
    • de waarde daarvan in overeenstemming is met de verantwoordelijkheden in het MedMij Afsprakenstelsel en
    • uit het verstreken zijn daarvan wél de ongeldigheid van de authorization-code of het access-token mag worden geconcludeerd door de OAuth Authorization Server of de Resource Server, maar uit het nog niet verstreken zijn daarvan niet diens geldigheid, waarvoor namelijk een validatie van het gehele token tegen de interne administratie van de OAuth Authorization Server de enige autoriteit is;
  • een identificatie van de service die het token heeft uitgegeven;
  • de scope waarvoor de authorization-code of het access-token is uitgegeven, in de vorm van een kopie van de scope-parameter van de authorization request in antwoord waarop de authorization-code of het access-token is uitgegeven;
  • de naam van het token-formaat;
  • een digitale handtekening.

Anchor
core.autorisatie.206
core.autorisatie.206
core.autorisatie.206

9.Geen andere informatie dan de in verantwoordelijkheid 7 genoemde mag voorkomen in de authorization-code of het acces-token, ook niet versleuteld. Er mogen t.a.v. informatie-inhoud van het token verschillende keuzes gemaakt worden tussen authorization-code en access-token. De OAuth Client mag de inhoud van het token niet interpreteren.

Anchor
core.autorisatie.207
core.autorisatie.207
core.autorisatie.207

10.

Met betrekking tot zowel authorization-codes als access-tokens, draagt de OAuth Authorization Server die hen uitgeeft ervoor zorg, dat daarvan nooit twee dezelfde geldige in omloop zijn.

Expand
titleToelichting

Dit is een maatregel tegen beveiligingsrisico 4.4.1.3 uit RFC 6819. Aan de in omloop gebrachte authorization-codes en access-tokens zijn twee belangrijke eisen te stellen: uniciteit en vertrouwelijkheid. De eis van vertrouwelijkheid weegt in het MedMij Afsprakenstelsel zwaar. Omdat de authorization-code (indirect) en het access-token (direct) toegang geven tot persoonlijke gezondheidsinformatie, kiest MedMij voor een formaat dat vrijwel betekenisloos is en alleen betekenis krijgt door confrontatie met lokale en goed beschermde administraties van de OAuth Authorization Server. De maximale raadkans wordt geëist in RFC6749, sectie 10.10. Er mag door vergelijking van meerdere authorization-codes of access-tokens niet doorschemeren hoe zij gegenereerd worden.


Wanneer een identifier is opgenomen in het access-token, kan dat gebruikt worden als identificatie van de OAuth Authorization Server-sessie waarin het token werd uitgegeven, zodat de OAuth Resource Server deze sessie kan hervatten wanneer zij het access-token aangeboden krijgt. Het is ook mogelijk dat een dergelijke identifier niet zozeer is opgenomen in de authorization-code, respectievelijk het access-token, maar geheel overeenkomt met de authorization-code, respectievelijk het access-token. Hoe dan ook, verantwoordelijkheid 6 blijft erop van kracht.

Wanneer een verloopmoment is opgenomen in het access-token, wordt het mogelijk om de OAuth Resource Server te laten afzien van onnodige raadpleging van de OAuth Authorization Server, wanneer deze apart geïmplementeerd zouden zijn. De tweede voorwaarde bij deze mogelijkheid voorkomt dat een eventuele corrumpering, in het Persoonsdomein, van de authorization-code of het access-token waarbij het verloopmoment verlaat zou worden, leidt tot onterechte toegang tot, of onterechte plaatsing van gezondheidsinformatie. Het accepteren van een authorization-code of een access-token gebeurt altijd in het licht van de interne administratie van de OAuth Authorization Server. Die corrumpering kan het verloopmoment ook vervroegen, maar richt dan weinig schade aan. Overigens kan in de deze versie van het MedMij Afsprakenstelsel, waarin de geldigheidsduur een vaste waarde heeft, de OAuth Client zelf ook al uitrekenen wanneer het geen zin meer heeft een authorization-code of access-token nog aan te bieden. De meerwaarde van het opnemen van een verloopmoment in de authorization-code of het access-token zal dus hooguit in mogelijke toekomstige versies kunnen blijken.

De service die het token heeft uitgegeven is al wel in deze versie van het MedMij Afsprakenstelsel een nuttig informatie-element. In situaties waarin een OAuth Resource Server samenwerkt met meerdere van hem gescheiden geïmplementeerde OAuth Authorization Server, moet deze bij een aangeboden access-token kunnen bepalen welke OAuth Authorization Server moet worden aangesproken. Dat aanspreken kan bijvoorbeeld door middel van Token Introspection volgens RFC7662. De geëigende bron voor die informatie is het access-token zelf, dat weet heeft van zijn afkomst. Die afkomstinformatie levert geen extra privacyrisico's op, omdat de OAuth Client sowieso op de hoogte is van wie hij het access-token heeft ontvangen.

Verder mag de OAuth Authorization Server ook een kopie van de scope opnemen in (de authorization-code of) het access-token, de scope die hij eerder in de authorization request heeft ontvangen van de OAuth Client (zie Authorization interface). Zo hoeft de OAuth Resource Server niet apart door de DVP Server van de scope op de hoogte gebracht te worden. De authorization-code of het access-token draagt zo weliswaar extra betekenis, maar de risico's daarvan wegen niet op tegen de risico's van het apart door de DVP Server laten sturen van de scope, die bijvoorbeeld zou kunnen afwijken van die waarvoor de authorization-code of het access-token is uitgegeven.

De lijst van toegestane informatie-elementen is limitatief. Geen andere informatie, ook niet versleuteld, mag in de authorization-code of het access-token zijn opgenomen. Daaronder vallen zeker ook:

  • informatie over Persoon;
  • informatie over Aanbieder of Gegevensdienst, al dan niet in relatie tot Persoon, buiten de scope;
  • benoeming van, en beperkingen aan, de beoogde acceptanten van de authorization-code of het access-token. Op dit punt is namelijk de Aanbiederslijst de autoriteit: als de OAuth Client een access-token heeft opgehaald op een plek die daartoe in de Aanbiederslijst stond, dan moet hij dat access-token kunnen aanbieden aan de plek die daartoe in de Aanbiederslijst staat.

Het verbod op interpretatie door de OAuth Client van authorization-code en access-token zorgt ervoor dat er een minimale afhankelijkheid wordt gecreëerd tussen de dienstverleners in het Persoonsdomein enerzijds en die in het Aanbiedersdomein anderzijds, zodat P1 en P7 maximaal worden nageleefd en interne complexiteit en implementatiekeuzes in het Aanbiedersdomein niet doorschemeren in, of invloed uitoefenen op, de implementatie in het Persoonsdomein.

De beperkingen van betekenisdragendheid van de authorization-code en het access-token, zelfs indien versleuteld, bevorderen de privacy door middel van dataminimalisatie. Bovendien voorkomen zij nieuwe risico's op compromittering van die informatie-inhoud. Zulke compromittering zou moeilijk te ontdekken en te pareren zijn in het Aanbiedersdomein, ingeval men er daar toe besloten zou hebben van interne autorisatie-administratie af te zien omdat de informatie toch al meereist op de authorization code of het acces token, via de OAuth Client.


Anchor
core.autorisatie.208
core.autorisatie.208
core.autorisatie.208

11.

Access-tokens worden alleen uitgegeven na controle van de client_id, de opgegeven autorisatie-code en de Common name van het in de TLS verbinding gebruikte certificaat. De controles worden uitgevoerd conform:

  • IETF RFC 6749, De code moet zijn uitgegeven aan de opgegeven client_id.
  • IETF RFC 8705, Bij het verzoek naar het token-endpoint wordt gebruikgemaakt van een certificaat, waarvan de Common name geregistreerd is bij de opgegeven client_id.
Note
titleControle certificaat optioneel

De controle van het in de TLS verbinding gebruikte certificaat is vooralsnog optioneel. De implementatie van deze controle wordt sterk aangeraden, zodat met een hogere mate van zekerheid de verzoekende partij kan worden vastgesteld.


Anchor
core.autorisatie.209
core.autorisatie.209
core.autorisatie.209

12.

Het OAuth-client type van de OAuth Client is confidential.

Expand
titleToelichting

Om de privacy te kunnen borgen is het van belang dat de OAuth Authorization Server voldoende zekerheid heeft over de identiteit van de OAuth Client. Die zekerheid is afhankelijk van hoe goed de OAuth Client zijn credentials vertrouwelijk kan houden. Daartoe maakt de OAuth-specificatie onderscheid tussen twee client types: confidential en public. De eerste soort kan een voor de OAuth Authorization Server afdoende mate van vertrouwelijkheid van zijn credentials bieden, de tweede niet. Het is een hoofddoel van MedMij om zulk vertrouwen te borgen in een afsprakenstelsel en niet over te laten aan individuele spelers. Daarom verbindt het MedMij Afsprakenstelsel verantwoordelijkheden aan OAuth Clients ten behoeve van hun betrouwbaarheid jegens OAuth Authorization Server. We verwachten dat een groot deel van de implementaties van de OAuth Client (van de DVP Server dus) deze vertrouwelijkheid sowieso kunnen bieden, omdat ze de architectuur hebben van wat de OAuth-specificatie web application noemt. Andersoortige DVP Server-architecturen, zoals die van een app, zijn ook mogelijk, maar alleen onder de voorwaarde dat de OAuth Client al het credentials-verkeer in de achtergrond op een server afhandelt, niet via het user device.


Anchor
core.autorisatie.210
core.autorisatie.210
core.autorisatie.210

...

1.In het gegevensverkeer voor de functies Verzamelen, Delen, Opvragen Aanbiederslijst, Opvragen OAuth Client List en Opvragen Gegevensdienstnamenlijst, maken betrokken rollen gebruik van de functies Versleuteling, Server Authentication en Server Authorization, zoals beschreven onder TLS en certificaten.

Anchor
core.beveiliging.200
core.beveiliging.200
core.beveiliging.200

2.

De OAuth Client en OAuth Authorization Server gebruiken voor al hun onderlinge verkeer PKI-certificaten, en wel servercertificaten, ten behoeve van de authenticatie van de andere server in een uitwisseling.

Expand
titleToelichting

Dit is een maatregel tegen beveiligingsrisico's 4.4.1.1, 4.4.1.3, 4.4.1.4 en 4.4.1.5 in RFC 6819. De PKI-certificaten worden in deze release van het MedMij Afsprakenstelsel gebruik voor twee doelen op de tehnologielaag: authenticatie van servers en versleuteling, waarmee de vertrouwelijkheid en integriteit van de inhoud van het gegevensverkeer wordt geborgd.


Anchor
core.beveiliging.201
core.beveiliging.201
core.beveiliging.201

3.

De OAuth Client realiseert de volgende beveiligingsmaatregelen, conform RFC 6819:

beveiligingsmaatregelparagraaf in
RFC 6819
gemitigeerde risico('s)
Clients should use an appropriate protocol, such as OpenID or SAML to implement user login. Both support audience restrictions on clients.4.4.1.134.4.1.13
All clients must indicate their client ids with every request to exchange an authorization "code" for an access token.

Keep access tokens in transient memory and limit grants.5.1.6
Keep access tokens in private memory.5.2.24.1.3
The "state" parameter should be used to link the authorization request with the redirect URI used to deliver the access token.5.3.54.4.1.8
CSRF defense and the "state" parameter created with secure random codes should be deployed on the client side. The client should forward the authorization "code" to the authorization server only after both the CSRF token and the "state" parameter are validated.4.4.1.12


Anchor
core.beveiliging.202
core.beveiliging.202
core.beveiliging.202

4.

De OAuth Client realiseert de volgende beveiligingsmaatregelen, conform RFC 6819:

beveiligingsmaatregelparagraaf in
RFC 6819
gemitigeerde risico('s)
Client applications should not collect authentication information directly from users and should instead delegate this task to a trusted system component, e.g., the system browser.4.1.44.1.4
The client server may reload the target page of the redirect URI  in order to automatically clean up the browser cache.4.4.1.14.4.1.1
If the client authenticates the user, either through a single-sign-on protocol or through local authentication, the client should suspend the access by a user account if the number of invalid authorization "codes" submitted by this user exceeds a certain threshold.4.4.1.124.4.1.12
Client developers and end users can be educated to not follow untrusted URLs.4.4.1.84.4.1.8
For newer browsers, avoidance of iFrames during authorization can be enforced on the server side by using the X-FRAME-OPTIONS header. For older browsers, JavaScript frame-busting techniques can be used but may not be effective in all browsers.5.2.2.64.4.1.9
Explain the scope (resources and the permissions) the user is about to grant in an understandable way5.2.4.24.2.2


Anchor
core.beveiliging.203
core.beveiliging.203
core.beveiliging.203

5.

De OAuth Authorization Server realiseert de volgende beveiligingsmaatregelen, conform RFC 6819:

beveiligingsmaatregelparagraaf in RFC6819gemitigeerde risico('s)
Authorization servers should consider such attacks: Password Phishing by Counterfeit Authorization Server4.2.14.2.1
Authorization servers should attempt to educate users about the risks posed by phishing attacks and should provide mechanisms that make it easy for users to confirm the authenticity of their sites.

Authorization servers should decide, based on an analysis of the risk associated with this threat, whether to detect and prevent this threat.4.4.1.10

4.4.1.10

The authorization server may force a user interaction based on non-predictable input values as part of the user consent approval. 

The authorization server could make use of CAPTCHAs.

The authorization server should consider limiting the number of access tokens granted per user.4.4.1.114.4.1.11
The authorization server should send an error response to the client reporting an invalid authorization "code" and rate-limit or disallow connections from clients whose number of invalid requests exceeds a threshold.4.4.1.124.4.1.12
Given that all clients must indicate their client ids with every request to exchange an authorization "code" for an access token, the authorization server must validate whether the particular authorization "code" has been issued to the particular client.4.4.1.134.4.1.13
Best practices for credential storage protection should be employed.5.1.4.14.4.1.2
Enforce system security measures.5.1.4.1.14.3.2 en 4.4.1.2

Enforce standard SQL injection countermeasures.5.1.4.1.2
Store access token hashes only.5.1.4.1.3
The authorization server should enforce a one-time usage restriction.5.1.5.44.4.1.1
If an authorization server observes multiple attempts to redeem an authorization "code", the authorization server may want to revoke all tokens granted based on the authorization "code".5.2.1.1
Bind the authorization "code" to the redirect URI.5.2.4.54.4.1.3
the authorization server associates the authorization "code" with the redirect URI of a particular end-user authorization and validates this redirect URI with the redirect URI passed to the token's endpoint,4.4.1.7


Anchor
core.beveiliging.204
core.beveiliging.204
core.beveiliging.204

6.

OAuth Client, OAuth Authorization Server en OAuth Resource Server implementeren de op deze respectievelijke rollen toepasselijke beveiligingsmaatregelen, volgens paragaaf 5.3 van RFC 6750.

Expand
titleToelichting

Deze verantwoordelijkheid is opgenomen omdat met het bearer token informatie verkregen kan worden zonder dat nogmaals de identiteit wordt gecontroleerd. Daarom moeten maatregelen getroffen worden om te waarborgen dat het token alleen correct gebruikt kan worden.


Anchor
core.beveiliging.205
core.beveiliging.205
core.beveiliging.205

...