Document toolboxDocument toolbox

RFC0054 Langdurige en offline autorisatie van DVP

Samenvatting

Waarom is deze RFC nodig?

Deze RFC is nodig om de gebruiksvriendelijkheid van MedMij voor gebruikers (Persoon) en (zorg)aanbieders te vergroten.

Doelstellingen:

  1. Persoon hoeft niet voor iedere uitwisseling (opnieuw) in te loggen en toestemming te geven;
  2. PGO Server verkrijgt naast online access ook offline access, d.w.z. PGO Server kan ook gegevens uitwisselen met een Resource Server, zonder dat Persoon online is.

Scope:

  • UC Verzamelen (UC Delen volgt in een later stadium)

Requirements:

  • Persoon kan kiezen hoe lang een toestemming geldt en kan deze weer intrekken
  • Intrekken kan tenminste vanuit de betreffende DVP bij de DVA
    • DVP biedt hiervoor verplicht een gebruikersinterface aan de Persoon
    • DVA biedt hiervoor een systeeminterface aan de DVP
  • Intrekken kan bij voorkeur op termijn ook bij één of meerdere onafhankelijke toestemmingsvoorzieningen (voor nu buiten scope)
Input van deelnemers
  1. Graag de oplossing met refresh_tokens zoveel mogelijk conform de standaard vormgeven. Mogelijk ook MedMij standaarden hanteren voor de mogelijke geldigheidstermijnen. En goed nadenken over foutsituaties en foutafhandeling.

  2. Oplossing met refresh_tokens goed afstemmen met Logius/DigiD. E.e.a. ook in het kader van de Wet Digitale Overheid (WDO).

  3. Ook security officers van (grote) zorginstellingen betrekken bij een op te zetten risico-analyse.

Oplossingsrichting

Wat is hiervoor nodig:

  • DVA moet voor een gegeven toestemming, op het moment dat deze wordt gebruikt, ook de beschikbaarheid van de Aanbieder kunnen toetsen of afleiden.
  • PGO Server moet iets van een “toegangsbewijs” kunnen insturen, met een langdurige geldigheidstermijn.
  • Dit "toegangsbewijs" moet door DVA, zonder nadere interactie met Persoon
    • kunnen worden gerelateerd aan het BSN van Persoon;
    • kunnen worden gevalideerd.
  • OAuth refresh_tokens, inclusief de mogelijkheid om refresh_tokens in te trekken (token revocation).


Samenvatting:

  • Aanbieder volgt, binnen de grenzen van beschikbaarheid, de toestemming van Persoon en zet deze om in een autorisatie (access_token) EN in een voorwaardelijke autorisatie (refresh_token)
  • Access_token
    • Geldigheidsduur van 15 minuten
    • Scope omvat één of meerdere aanbieder-gegevensdienst combinaties
  • Refresh_token
    • Geldigheidsduur van de verleende toestemming
    • Scope omvat één of meerdere aanbieder-categorie combinaties (zodat een voorwaardelijke autorisatie langer kan bestaan dan een gegevensdienst)
  • O.b.v. het refresh_token kan de DVP ook zonder dat Persoon is ingelogd, gegevens uitwisselen met de betreffende Aanbieder - DVA toetst de beschikbaarheidsvoorwaarde
    • bij het verstrekken van een access_token o.b.v. een refresh_token, OF
    • bij het gebruik van een verkregen access_token bij de Resource Server
  • Hiermee wordt de voorwaardelijke autorisatie omgezet in een autorisatie


Flow voor 1e verzamel-actie:

  1. Persoon kiest de (één) aanbieder en de gewenste (gegevens)diensten.
  2. DVP bepaalt het juiste authorization endpoint en het juiste token endpoint.
  3. De autorisatieserver ontvangt, van de OAuth User Agent, een Authorization Request met in de scope één of meerdere diensten van deze aanbieder en de gewenste duur voor autorisatie.
  4. Gebruiker authentiseert zich bij een Authenticatie Provider en wordt teruggestuurd naar de autorisatieserver.
  5. Optioneel: de autorisatieserver toetst de beschikbaarheidsvoorwaarde voor de gewenste (gegevens)diensten.
  6. De autorisatieserver toont een toestemmingscherm met de tekst:

    U geeft hierbij Naamaanbieder toestemming om gedurende Periode, met NaamLeverancierPGO NaamCategorie uit te wisselen, voor het doel deze persoons- en gezondheidsgegevens op te nemen in uw persoonlijke gezondheidsomgeving.

    (Optioneel, d.w.z. indien vroeg getoetst en niet beschikbaar voor Persoon) De volgende, van de door u gevraagde, gegevens worden door Naamaanbieder niet aan u beschikbaar gesteld:
    - NaamGegevensdienst;
    - NaamGegevensdienst.

    Zonder stap 3

    U geeft hierbij <Naamaanbieder> toestemming om <NaamCategorie> uit te wisselen met <NaamLeverancierPGO>, voor het doel persoons- en gezondheidsgegevens op te nemen in uw persoonlijke gezondheidsomgeving. Deze toestemming is geldig tot de hieronder opgegeven einddatum. Indien u geen einddatum opgeeft, geldt de toestemming totdat u deze intrekt.

    -Einddatum: <Einddatum>

    De volgend gegevens zijn voor u beschikbaar en worden met <NaamLeverancierPGO> gedeeld. Indien u bepaalde gegevens niet wilt laten uitwisselen, kunt u deze uitschakelen:
    [] <NaamGegevensdienst>;
    [] <NaamGegevensdienst>.

    [toestemmingbutton]

  7. De PGO server verkrijgt
    1. een access_token (15 minuten) voor de toegekende scope (aanbieder-dienst-combinaties) EN
    2. een refresh_token dat geldig is voor de overeengekomen duur en toestemming (aanbieder-categorie-combinaties)
  8. DVP bepaalt de juiste resource endpoints.
  9. De PGO server gebruikt het access_token bij de benodigde interacties met de resource server.

Gekozen oplossingsrichting:


Flow bij herhaalde verzamel-actie:

  1. DVP detecteert dat het beschikt over een geldig refresh_token.
  2. DVP bepaalt het juiste token endpoint.
  3. De PGO server verkrijgt d.m.v. het refresh_token, voor één of meerdere diensten van deze aanbieder
    1. een geldig access_token (15 minuten) voor de toegekende scope (aanbieder-dienst-combinaties)
    2. een nieuw refresh_token dat geldig is voor de eerder overeengekomen duur en scope (oude refresh_token wordt ongeldig).
  4. DVP bepaalt de juiste resource endpoints.
  5. De PGO server gebruikt het access_token bij de benodigde interacties met de resource server.





Aanpassing van

N.t.b.

Impact op rollen

DVP, DVA

Impact op beheer

N.t.b.

Impact op RnA

N.t.b.

Impact op Acceptatie

Ja

PIA noodzakelijk
  •  
Gerelateerd aan (Andere RFCs, PIM issues)

Deze RFC is afhankelijk van RFC0039.

Eigenaar
Implementatietermijn

1.5.0

Motivatie verkorte RFC procedure (patch)


Goedkeuring

BeoordelaarDatumToelichtingBeoordelaarDatumToelichting
Productmanager Stichting MedMij

Productmanager Beheerorganisatie

Leadarchitect Stichting MedMij

Leadarchitect Beheerorganisatie

Ontwerpteam




Deelnemersraad

Eigenaarsraad

Principe's

Principe
Principe

1 Het MedMij-netwerk is zoveel mogelijk gegevensneutraal

  •  
11 Stelselfuncties worden vanaf de start ingevuld
  •  
2 Dienstverleners zijn transparant over de gegevensdiensten 
  •  
12 Het afsprakenstelsel is een groeimodel
  •  
Dienstverleners concurreren op de functionaliteiten
  •  
13 Ontwikkeling geschiedt in een half-open proces met verschillende stakeholders
  •  
Dienstverleners zijn aanspreekbaar door de gebruiker
  •  
14 Uitwisseling is een keuze
  •  
De persoon wisselt gegevens uit met de zorgaanbieder
  •  
15 Het MedMij-netwerk is gebruiksrechten-neutraal
  •  
MedMij spreekt alleen af wat nodig is
  •  
16 De burger regisseert zijn gezondheidsinformatie als uitgever
  •  
De persoon en de zorgaanbieder kiezen hun eigen dienstverlener
  •  
17 Aan de persoonlijke gezondheidsomgeving zelf worden eisen gesteld
  •  
De dienstverleners zijn deelnemers van het afsprakenstelsel
  •  
18 Afspraken worden aantoonbaar nageleefd en gehandhaafd
  •  
10 Alleen de dienstverleners oefenen macht uit over persoonsgegevens bij de uitwisseling
  •  
19 Het afsprakenstelsel snijdt het gebruik van normen en standaarden op eigen maat
  •  
Toelichting


Uitwerking

Volgt.

Risico's

Omschrijf de (privacy)risico's die kunnen ontstaan als deze RFC wordt aangenomen. In het onwaarschijnlijke geval dat deze RFC's geen risico's introduceert, geef dat dan wel aan.

Kans en impact zijn geclassificeerd conform NEN7512. De classificatie weerspiegelt de risico's die zijn verbonden aan deze RFC nadat onderstaande security maatregelen al zijn genomen.

Genomen security maatregelen in de oplossing:

MaatregelToelichting
The authorization server MUST ensure that refresh tokens cannot be generated, modified, or guessed to produce valid refresh tokens by unauthorized parties.

Opaque refresh_tokens moeten een hoge entropie hebben. Wordt in AS al vereist voor authorization codes en access tokens, nog niet voor refresh_tokens.

JWT-based refresh_tokens moeten worden gesigned door de issuer. Zie ook: https://datatracker.ietf.org/doc/html/rfc8725.

Refresh tokens MUST be kept confidential in transit and storage, and shared only among the authorization server and the client to whom the refresh tokens were issued. 

Refresh tokens MUST only be transmitted using TLS as described in Section 1.6 with server authentication as defined by [RFC2818]

Enforce Credential Storage Protection Best Practices

https://datatracker.ietf.org/doc/html/rfc6819#section-5.1.4.1

https://datatracker.ietf.org/doc/html/rfc6819#section-5.1.2

In het afsprakenstelsel wordt reeds mTLS vereist tussen PGO Server en Autorisatie Server en worden middels een aanvullend normenkader reeds eisen gesteld aan de beveiliging van de opslag bij DVP en DVA. Wordt dit ook voldoende gedaan m.b.t. opslag van tokens?

The authorization server MUST maintain the binding between a refresh token and the client to whom it was issued. The authorization server MUST verify the binding between the refresh token and client identity whenever the client identity can be authenticated.

https://datatracker.ietf.org/doc/html/rfc6819#section-5.1.5.8

https://datatracker.ietf.org/doc/html/draft-ietf-oauth-token-binding-08#section-2

https://connect2id.com/learn/token-binding

https://tools.ietf.org/id/draft-ietf-oauth-pop-key-distribution-04.html

Er wordt gekozen om het refresh_token gewoon te binden aan de OAuth client_id (hostname uit de OCL). Wanneer Authorization Server een verzoek krijgt om een token te refreshen, dan mag zij dit slechts doen voor de OAuth client aan wie het refresh_token oorspronkelijk was uitgegeven. Dus binnen het afsprakenstelsel ook de client_id toestaan als claim in een security token.

The authorization server MUST employ refresh token rotation in which a new refresh token is issued with every access token refresh response.  The previous refresh token is invalidated but retained by the authorization server.

If a refresh token is compromised and subsequently used by both the attacker and the legitimate client, one of them will present an invalidated refresh token, which will inform the authorization server of the breach.
Refresh_tokens moeten kunnen worden revokedhttps://datatracker.ietf.org/doc/html/rfc6819#section-5.2.2.4

Restricted Issuance of Refresh Tokens >> is er een relevant criterium om onderscheid te maken tussen PGO Servers? Bijv. extra eisen aan authenticatie in PGO.

https://datatracker.ietf.org/doc/html/rfc6819#section-5.2.2.1


Resterende risico's:

DreigingKansImpactResulterend RisicoDreigingsID (intern)Benodigde aanvullende maatregelen

PGO Server wordt (ongemerkt) overgenomen door hackers, waardoor nieuwe (FHIR-)interacties kunnen worden ingestuurd door deze hackers en nieuwe medische gegevens in handen komen van de hackers.

Dit kan dan worden gedaan voor alle gebruikers van deze PGO Server waarvoor reeds refresh_tokens beschikbaar zijn in de PGO Server.

Middelmatig


MatigMatig

Geen.

Kans wordt niet verhoogd door deze RFC.

Impact wordt enigszins verhoogd door deze RFC, doordat meer gegevens kunnen worden verkregen of verzonden dan degenen die reeds uitgewisseld waren.

Onopzettelijke fout in PGO Server, waardoor een verkregen refresh_token voor persoon 1 wordt gebruikt voor een (FHIR-)interactie die wordt gestuurd vanuit het PGO van persoon 2.KleinMatigMatig
Toetsen tijdens MedMij acceptatie.

Autorisatie Server wordt (ongemerkt) overgenomen door hackers, waardoor onbeperkt geldige refresh_tokens kunnen worden gegenereerd.

EN

PGO Server wordt (ongemerkt) overgenomen door hackers, waardoor (FHIR-)interacties kunnen worden ingestuurd door deze hackers en medische gegevens in handen komen van de hackers.

Klein

Zonder aanvullende maatregelen: Omvangrijk

Met aanvullende maatregelen: Matig

Zonder aanvullende maatregelen: Hoog

Met aanvullende maatregelen: Matig


Dit risico bestaat ook al wanneer slechts met access_tokens wordt gewerkt en niet met refresh_tokens. Echter in dat geval kan de resource server (en/of een achterliggend systeem) naast het access_token van de autorisatie server een bijbehorend (voldoende recent) authenticatietoken eisen en toetsen, waarmee de impact van een inbraak sterk wordt gereduceerd.

Eenzelfde check kan nog steeds worden gedaan, al zullen nu ook in het verleden verkregen authenticatietokens moeten worden gebruikt als extra check (en validatie van de signature moet nog mogelijk zijn). Hierdoor wordt de impact van een inbraak wat groter dan wanneer zonder refresh_tokens wordt gewerkt.

Omdat mogelijk niet alle (DV)ZA's in staat zijn om voldoende extra maatregelen te treffen, moet de functionaliteit om refresh_tokens te ondersteunen optioneel zijn in het afsprakenstelsel. Bouke de Boer | MedMij Mee eens?

Onopzettelijke fout in Autorisatie Server, waardoor afgegeven refresh_tokens worden gekoppeld aan de verkeerde BSN.KleinMatigMatig
Toetsen tijdens MedMij acceptatie.

Bijlagen

  File Modified
No files shared here yet.