...
- Registreren: Bij het toetreden van een domein wordt voor elke applicatie-instantie een
Device
resource aangemaakt. - Authenticeren: Alle communicatie met de FHIR resource service vereist een Bearer
access_token
. Dit token bevat (indirect) informatie over welkeDevice
dit request uitvoert. - Eigenaarschap: Alle resources die aangemaakt worden op de FHIR resource service, krijgen automatisch een
resource-origin
extensie. Deze extensie refereert naar de gekoppeldeDevice
resource van de geauthenticeerde applicatie-instantie. - Autoriseren: Alle CRUD-acties die plaatsvinden op een resource, worden - aan de hand van de
resource-origin
extensie en de rol van de geauthenticeerde applicatie-instantie - geautoriseerd.
...
Resource: Een permissie is altijd gekoppeld aan een enkele FHIR Domain Resource.
Actie: Is van toepassing op een Create (C), Read (R), Update (U) of Delete (D) actie.
Scope: Heeft één van de volgende scopes:
Scope Beschrijving OWN De permissie is enkel van toepassing op resources waarvan de resource-origin
overeenkomt met de geauthenticeerde applicatie.GRANTED De permissie is van toepassing op resources waarvan de resource-origin
overeenkomt met één van de geselecteerde applicatie(s).ALL De permissie is van toepassing op alle resources in het domein.
...
{
"system": "<https://koppeltaal.nl/client_id>",
"value": "<CLIENT_ID>"
}
Mappen van
...
access_token
naar Device
Wanneer een access_token
opgehaald wordt door een applicatie-instantie, bevat MOET deze altijd het azp
veld bevatten. Dit veld wordt door de autorisatieserver gevuld met de client_id
van de applicatie die de access_token
opvraagt. Aangezien elke Device
resource een https://koppeltaal.nl/client_id
identifier moet hebben, kan de mapping plaatsvinden.
...
Bij het uitgeven van een access_token
worden MOET de autorisatieserver de gekoppelde permissies omgezet omzetten naar het scope
veld. Raadpleeg [TODO: LINK TOEVOEGEN] voor de exacte uitwerking hiervan.
...
De FHIR resource service autoriseert elke binnenkomende CRUD request. Elke request MOET middels de volgende logica geautoriseerd worden:
- Zoek een scope (permissie) op voor de geauthoriseerde applicatie-instantie aan de hand van CRUD-actie en
Resource
type. BijvoorbeeldUPDATE
enActivityDefinition
.voor eenUPDATE
op eenActivityDefinition
wordt gezocht naar de volgende reguliere expressie:((?:\d|,)*|\*)?\/ActivityDefinition\.(?:update|\*)
- Indien niet aanwezig: FHIR resource service respond met een
403 Forbidden
. - Indien ‘actie
CREATE
' OF ‘scopeALL
': Applicatie is geautoriseerd. Ga verder met aanmakenResource
. - Controleer de scope (let op dat de
access_token.scope
enkel de logical id van deDevice
bevat):OWN
: Verifieer dat deresource-origin
waarde van deResource
overeenkomt met deDevice
van de geauthenticeerde applicatie-instantie. Indien dit niet het geval is: respond met een403 Forbidden
.GRANTED
: Verifieer dat deresource-origin
waarde van deResource
voorkomt in de lijst van geselecteerdeDevices
op de permissie. Indien dit niet het geval is: respond met een403 Forbidden
.
...
Eis | Auth server | Domeinbeheer | Applicatie-instantie | FHIR Resource service |
---|---|---|---|---|
Elk access_token MOET een azp veld hebben waar de client_id van de applicatie-instantie in staat. | X | |||
De permissies gekoppeld aan de rol van een applicatie-instantie MOETEN meegegeven worden als scope waarde van de access_token. | X | |||
Er MOET een Device resource aangemaakt worden voor elke applicatie-instantie op het moment dat een domein wordt toegetreden. | X | |||
De client_id MOET uniek zijn over alle Devices. | X | |||
De aangemaakte Device MOET een identifier bevatten die refereert naar de toegekende client_id van de applicatie-instantie. Deze identifier MOET als system de volgende system hebben: https://koppeltaal.nl/client_id. | X | |||
Een applicatie-instantie MOET één rol bevatten. | X | |||
Rollen en permissies MOETEN beschikbaar gesteld worden op het niveau van applicatie-instanties. | X | |||
Een Create permissie MOET altijd de scope OWN zijn | X | |||
Elke CRUD request MOET een access_token bevatten. | X | |||
Er mag GEEN POST [base] (batch/transactie) uitgevoerd worden met Bundles. | X | X | ||
Er mag GEEN gebruik gemaakt worden van de _include , _revinclude, _contained of _containedType search parameters. | X | X | ||
De autorisatie-flow MOET uitgevoerd worden voor elke CRUD request | X | |||
De resource-origin extensie MOET toegevoegd worden bij het aanmaken van een Resource. | X | |||
De resource-origin extensie MOET gezet worden bij een PUT indien deze niet aangeleverd wordt. | X | |||
De resource-origin MAG meegegeven worden met een PUT, maar mag NIET veranderd zijn. | X | |||
Er MOET search narrowing toegepast worden. | X | |||
Er MOET subscription narrowing toegepast worden. | X |
...