Versions Compared

Key

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

...

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 Autoriseren. Deze Toestemming is:

  • geldig voor de huidige sessie, of
  • bij langdurige toestemming geldig voor onbepaalde tijd, mits minimaal één keer per 6 maanden gebruikgemaakt wordt van de toestemming en deze niet ingetrokken is.

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.

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

3.

In de implementatie van de functies (MedMij Afsprakenstelsel 2.2.4) 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, in opdracht van de Authorization server of Resource server, een scherm 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 Grant.

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.

Hoewel het technisch mogelijk is om meerdere scopes mee te geven, maakt de OAuth Client voor de functie Verzamelen gebruik van een enkelvoudige scope. Hierin staat enkel de MedMij-naam van de Aanbieder, waarvoor autorisatie wordt gevraagd, genoemd. De OAuth Authorization Server genereert authorization-codes en refresh-tokens met een enkelvoudige scope die gelijk is aan de scope in het verzoek van de OAuth client. De OAuth Authorization Server genereert access-tokens met de mogelijkheid tot een meervoudige scope, waarin een lijst van beschikbare gegevensdiensten wordt toegevoegd.

Info

De scope van het access-token wijkt bij de functie Verzamelen af van de scope van de overige onderdelen. Dit staat verder uitgewerkt in core.tkint.201.

Ook bij de functie Delen wordt gebruikgemaakt van een enkelvoudige scope. In tegenstelling tot de functie Verzamelen bevat de scope niet de MedMij-naam van de Aanbieder, maar is deze gerelateerd aan één Gegevensdienst per keer. Dit staat verder uitgewerkt in core.authint.200.

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

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 stelt van elk uitgegeven refresh-token de geldigheidsduur op 6 maanden. Hierbij geldt de dag waarop het refresh-token uitgegeven wordt als eerste dag. 

Anchor
core.autorisatie.211
core.autorisatie.211
core.autorisatie.211

9.De OAuth Authorization Server genereert authorization-codes, access-tokens en refresh-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

10.In de authorization-codes, access-tokens en refresh-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 of het refresh-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, het access-token of het refresh-token is uitgegeven.
  • de naam van het token-formaat;
  • een digitale handtekening.

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

11.Geen andere informatie dan de in core.autorisatie.206 genoemde mag voorkomen in de authorization-code, het access-token of het refresh-token, ook niet versleuteld. Er mogen t.a.v. informatie-inhoud van het token verschillende keuzes gemaakt worden tussen authorization-code, access-token of het refresh-token. De OAuth Client mag de inhoud van het token niet interpreteren.

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

12.

Met betrekking tot zowel authorization-codes als access-tokens en refresh-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 en refresh-tokens zijn twee belangrijke eisen te stellen: uniciteit en vertrouwelijkheid. De eis van vertrouwelijkheid weegt in het MedMij Afsprakenstelsel zwaar. Omdat de authorization-code en het refresh-token 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 core.autorisatie.206 blijft erop van kracht.

Wanneer een verloopmoment is opgenomen in het access-token of refresh-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, het access-token of hetrefreshtoken waarbij het verloopmoment verlaat zou worden, leidt tot onterechte toegang tot, of onterechte plaatsing van gezondheidsinformatie. Het accepteren van een authorization-code, een access-token of een refreshtoken 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, access-token of refresh-token nog aan te bieden. De meerwaarde van het opnemen van een verloopmoment in de authorization-code, het access-token  of het refreshtoken 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 en refresh-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, het access-token en het refresh-token dragen 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, het access-token of het refresh-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, access-token en refresh-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, het access-token en het refresh-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

13.

Access-tokens worden alleen uitgegeven na controle van de client_id, de opgegeven autorisatie-code (of het refresh-token) en na de whitelist controle zoals beschreven in core.whl.307. 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 door de TLS-client aangeboden certificaat, waarbij de Common Name (CN) of de Subject Alternative Name (SAN) op het certificaat overeenkomt met de geregistreerde naam in de OCL bij het opgegeven client_id. In de OCL staat deze naam onder het attribuut Common Name.
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

14.

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

...