...
Info |
---|
De value van de |
De FHIR resource service autoriseert elke binnenkomende CRUD request. Elke request MOET minimaal de volgende logica uitvoeren voor de autorisatie:
Wanneer een request binnenkomt kan de volgende informatie opgehaald worden:
...
Bijvoorbeeld bij een create van een Patient
zijn de volgende scopes valide (in de onderstaande voorbeelden is de logical id van de resource-origin 3a2c98b5-298e-4f95-ab21-077d6b2d2dcc
, deze wordt niet gevalideerd aangezien de resource-origin altijd gezet wordt door de FHIR resource service op een create):
...
Mag alle acties uitvoeren op Patient
resources met resource-origin Device/3a2c98b5-298e-4f95-ab21-077d6b2d2dcc
...
Zoek een permissie op in de access_token.scope
bij de geauthoriseerde applicatie-instantie aan de hand van de logical id van de resource-origin
, de <action> en <resource_type>. Bijvoorbeeld: voor een UPDATE
op een ActivityDefinition
met resource-origin
Device/3a2c98b5-298e-4f95-ab21-077d6b2d2dcc
kan gezocht worden middels een match op de volgende reguliere expressie:
Code Block |
---|
system\/(?:ActivityDefinition|\*)\.c?r?ud?s?(?:\?[a-z0-9-=&]*resource-origin=3a2c98b5-298e-4f95-ab21-077d6b2d2dcc|(?=\s|$)) |
Deze regex dwingt af dat er een u
voorkomt bij de action. Daarnaast moet OF de resource-origin voorkomen, of GEEN parameter gezet zijn. Dit laatste impliceert een ALL op permissie scope.
Info |
---|
De action karakters zijn volgorderlijk |
...
Het autoriseren MOET a.d.h.v. de scope op het access_token
plaatsvinden. Binnen Koppeltaal MOET de resource-origin
parameter op alle scopes gezet worden die geen ALL
permissie hebben. De waarde van deze parameter MOET comma-separated zijn indien er meer dan één resource-origin toegestaan is.
Autoriseren van een "Read all" request
Wanneer een applicatie-instantie geen specifieke instantie van een resource opvraagt, maar zoekt naar bijv. alle Patient
resources, dient de resource-origin
value gebruikt te worden voor Search Narrowing. Deze wordt later in het document toegelicht.
Autoriseren van een resource instantie request
Alle niet-"read all"-requests betreffen (binnen Koppeltaal) altijd een CRUD-operatie op een enkele instantie van een resource. Indien het geen create betreft, betreft het ook altijd een bestaande resource. Er is dan altijd een resource-origin
extensie aanwezig. De FHIR resource service MOET nagaan of de applicatie-instantie toegang heeft tot deze resource n.a.v. de resource type, actie en de resource-origin van de bestaande resource. Indien de gebruiker geen toegang heeft MOET er geantwoord worden met een HTTP code 403.
Search Narrowing
Wanneer alle resources opgehaald worden voor een specifiek type, bijv. GET /Patient
, mogen enkel de resources teruggegeven worden waar de applicatie-instantie leesrechten op heeft. Dit wordt door de FHIR resource service opgelost middels een interceptor pattern
. De oplossing dient de huidige query-parameters te filteren en uit te breiden in het geval dat de permissie scope niet ALL
is.
...