Versions Compared

Key

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

...

3.

In de use case-implementaties UCI VerzamelenUCI Delen en UCI Abonneren handelen PGO Server enerzijds en Authorization Server en Resource Server of Subscription Server anderzijds, hun onderlinge verkeer af conform de standaard OAuth 2.0.

Expand
titleToelichting

Conform wettelijke verplichting geeft Zorggebruiker, in deUC Verzamelen en de UC Abonneren, actief toestemming aan de Zorgaanbieder. In de UC Delen is deze verplichting niet aan de orde, maar vindt op dit moment evengoed een bevestiging door de Zorggebruiker plaats. De PGO Presenter presenteert een venster waarin de Zorggebruiker deze toestemming, respectievelijk bevestiging, kan geven. Aangezien in het persoonsdomein niet met BSN gewerkt mag worden, moet er een vervangende identificatie van de zorggebruiker gebruikt worden. Zie verantwoordelijkheid 5.


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.


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 Resource Server aan de Client de gevraagde resources kan prijsgeven als laatstgenoemde het access token aan eerstgenoemde overlegt. Bij de eenvoudigste vorm (Bearer Token) geeft de Resource Server eenvoudigweg aan elke 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 Client aan wie het uitgedeeld was. Andere token types kunnen daarom vragen om meer garanties, zoals een identiteit van de 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 Client en 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. Zie hiervoor verantwoordelijkheid 18.


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.


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 Verzamelen ononderbroken uitgevoerd (zie onder 1). De 900 seconden moeten dan voldoende zijn voor de Client om het access token aan de Authorization Server aan te bieden. Een refresh token is dan niet nodig.


8a.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.
8b.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 8a 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 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 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.
8c.

Geen andere informatie dan de in verantwoordelijkheid 8b 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.

8d.

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 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 Authorization Server-sessie waarin het token werd uitgegeven, zodat de 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 8a blijft erop van kracht.

Wanneer een verloopmoment is opgenomen in het access token, wordt het mogelijk om de Resource Server te laten afzien van onnodige raadpleging van de 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 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 Resource Server samenwerkt met meerdere van hem gescheiden geïmplementeerde Authorization Servers, moet deze bij een aangeboden access token kunnen bepalen welke 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, verantwoordelijkheid 1). Zo hoeft de Resource Server niet apart door de PGO 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 PGO 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 Zorgaanbieder 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 Zorgaanbiederslijst de autoriteit: als de OAuth Client een access token heeft opgehaald op een plek die daartoe in de Zorgaanbiederslijst stond, dan moet hij dat access token kunnen aanbieden aan de plek die daartoe in de Zorgaanbiederslijst 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 Zorgaanbiedersdomein anderzijds, zodat principes P1 en P7 maximaal worden nageleefd en interne complexiteit en implementatiekeuzes in het Zorgaanbiedersdomein 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 zorgaanbiedersdomein, 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.



8e.

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:

  • RFC6749, De code moet zijn uitgegeven aan de opgegeven client_id.
  • RFC8705, 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.


9.

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 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 Clients ten behoeve van hun betrouwbaarheid jegens Authorization Servers. We verwachten dat een groot deel van de implementaties van de Oauth Client (van de PGO Server dus) deze vertrouwelijkheid sowieso kunnen bieden, omdat ze de architectuur hebben van wat de OAuth-specificatie web application noemt. Andersoortige PGO 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.


...