...
Voor het autoriseren wordt gebruik gemaakt van de V2 scopes uit de SMART app launch. De uitgegeven scopes zijn een subset van de V2 scopes, en hebben altijd de resource-origin
parameters. De volgende syntax wordt gehanteerd:
De FHIR resource service autoriseert elke binnenkomende CRUD request. Elke request MOET middels minimaal de volgende logica geautoriseerd wordenuitvoeren voor de autorisatie:
Wanneer een request binnenkomt kan de volgende informatie opgehaald worden:
Informatie Hoe op te halen <resource_type> Dit kan bepaald worden aan de hand van de URL. De eerste waarde na de slash van de base FHIR resource service bevat altijd het Resource type. Bijvoorbeeld /Patient
,/Patient/2
of/ActivityDefinition
<action> Dit wordt bepaald aan de hand van het type HTTP request. GET → Read, POST → Create, PUT → Update en DELETE → Delete <resource-origin> Indien de request geen Create betreft, gaat het altijd om bestaande resources. Deze hebben per definitie een resource-origin
extensie die aangeeft wie de eigenaar van de resource is. Deze waarde MOET uit de gepersisteerde entiteit(en) gehaald worden. Wanneer een entiteit geüpdatet wordt, wordt deresource-origin
waarde dus van de te updaten versie afgehaald.- Indien de <action> een create is:
- hoeft de
resource-origin
niet geverifieerd te worden. Deze mag niet zelf gezet worden, maar wordt automatisch gezet door de FHIR resource service. Daarnaast is een create permissie altijd in de context van de OWN permissie. Het is niet toegestaan om Resources namens een andere applicatie aan te maken. - Zoek een scope in de context van
<resource_type>
of*
(all) EN action met letterlijke tekstc
of*
.Bijvoorbeeld bij een create van een
Patient
zijn de volgende scopes valide (in de onderstaande voorbeelden is de logical id van deresource-origin
123a2c98b5-298e-4f95-ab21-077d6b2d2dcc
, deze wordt niet gevalideerd aangezien de resource-origin altijd gezet wordt door de FHIR resource service op een create):Scope Uitleg system/Patient.c(ruds)?resource-origin=3a2c98b5-298e-4f95-ab21-077d6b2d2dcc Specifieke create permissie op de Patient
resource voorDevice/3a2c98b5-298e-4f95-ab21-077d6b2d2dcc
, optioneel mag deze ook de read, update en/of delete bevattensystem/*.c(rudsrud)?resource-origin=3a2c98b5-298e-4f95-ab21-077d6b2d2dcc Device/3a2c98b5-298e-4f95-ab21-077d6b2d2dcc
magMag alle resources aanmaken , optioneel mag deze ook de read, update en/of delete bevattenmet de eigen resource-origin, de parameter wordt niet geëvalueerd in het geval van een create system/Patient.cruds?resource-origin=3a2c98b5-298e-4f95-ab21-077d6b2d2dcc Mag alle acties uitvoeren op
Patient
resources met resource-originDevice/3a2c98b5-298e-4f95-ab21-077d6b2d2dcc
mag alle acties uitvoeren opPatient
resources
- hoeft de
- Indien de <action> GEEN create is, gaat het altijd om bestaande resources. Deze hebben per definitie een
resource-origin
extensie die aangeeft wie de eigenaar van de resource is. Haal de Resource(s) op en verifieer deresource-origin
waarden.Zoek een permissie op in de
access_token.scope
bij de geauthoriseerde applicatie-instantie aan de hand van de logical id van deresource-origin
, de <action> en <resource_type>. Bijvoorbeeld: voor eenUPDATE
op eenActivityDefinition
metresource-origin
Device/3a2c98b5-298e-4f95-ab21-077d6b2d2dcc
wordt 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 eenu
voorkomt bij de action. Daarnaast moet OF de resource-origin voorkomen, or GEEN parameter gezet zijn. Dit laatste impliceert een ALL op permissie scope.Info De action karakters zijn volgorderlijk
c
, r, u,d en s
.system/ActivityDefinition.crdus
is dus NIET valide. - Indien niet aanwezig: FHIR resource service respond met een
403 Forbidden
.
...