Versions Compared

Key

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

Beschrijving

...

De aanvraag van de applicatie naar de autorisatie service gebeurt door een POST request met de de volgende parameters met de application/x-www-form-urlencoded encoding:

  • scope: een lijst van scopes volgens het permissie schema of * voor alle beschikbare permissies. Om verwarring te voorkomen, er staat ook een scope in het access token.
  • grant_type: altijd client_credentials
  • client_assertion_type: altijd urn:ietf:params:oauth:client-assertion-type:jwt-bearer
  • client_assertion: het gegenereerd JWT token van de applicatie. Deze wordt in het onderdeel JWT Profile for OAuth 2.0 Client Authentication (rfc7523) verder toegelicht.

...

  • De applicatie instantie haalt het smart configuratie op bij de FHIR service (.well-known/smart-configuration). De SMART configuratie wordt omschreven in het onderdeel TOP-KT-016 - SMART on FHIR Conformiteit. Dit statement bevat, onder andere, het volgende endpoint: 
    • token_endpoint
  • De applicatie maakt zij client assertion door een JWT token met zijn private key te ondertekenen.
    • Dit JWT token bevat de volgende headers:
      • typ - De vaste waarde JWT.
      • kid - De Key ID (kid) in het geval gebruik wordt gemaakt van JWKS.
      • alg - zie het onderdeel TOP-KT-008 - Beveiliging aspecten voor welke algoritmen zijn toegestaan in koppeltaal.
    • Dit JWT token bevat de volgende velden:
      • iss: de client_id van de applicatie
      • sub: de client_id van de applicatie
      • aud: de URL van het token_endpoint
      • iat: de timestamp now()
      • jti: een unieke waarde voor deze aanvraag, UUIDs zijn hiervoor geschikt.
      • exp: de timestamp now() + 5 minuten
  • De applicatie benadert het token_endpoint endpoint met de volgende parameters in een application/x-www-form-urlencoded  POST request:
    • scope: dit veld is verplicht, de inhoud mag leeg blijven. Enige inhoud wordt genegeerd door de autorisatie service.
    • grant_type: `client_credentials`
    • client_assertion_type: `urn:ietf:params:oauth:client-assertion-type:jwt-bearer`
    • client_assertion: het gegenereerde JWT token uit de vorige stap.
  • De autorisatie service ontvangt het token, daarbij onderneemt hij de volgende stappen:
    • Op basis van de domeinconfiguratie wordt de juiste JWKS URL opgehaald om het token te valideren.
    • Het token wordt gevalideerd op basis van de Key ID (kid) in de header van het JWT token en de keys beschikbaar in de JWKS URL.
    • De client_id wordt gekoppeld aan het juiste Device in de FHIR resource service.
    • In de domeinconfiguratie wordt de juiste rol(en) opgehaald, deze wordt vertaald in een lijst van permissies in het formaat zoals beschreven in het onderdeel Het access_token en de SMART Scopes syntax.
  • De autorisatie service genereert een access_token door het ondertekenen van een JWT.
    • De JWT header bevat de volgende waarden:
      • typ - De vaste waarde JWT.
      • kid - De Key ID (kid)  van het asymmetrisch sleutelpaar gebruikt voor de ondertekening.
      • alg - zie het onderdeel TOP-KT-008 - Beveiliging aspecten voor welke algoritmen zijn toegestaan in koppeltaal.
    • De JWT body bevat de volgende waarden:
      • iss: de base url van de autorisatie service
      • azp: de client_id 
      • aud: de vaste waarde "fhir-service"
      • nbf: timestamp now()
      • jti: een unieke waarde voor dit token, aangeraden wordt om een uuid4 te gebruiken.
      • iat: timestamp now()
      • exp: timestamp now() + 5 min
      • scope: de lijst van permissies, geformatteerd volgens het door koppeltaal vastgelegde formaat zoals omschreven in het onderdeel Het access_token en de SMART Scopes syntax.
      • type: vaste waarde "access"
  • De autorisatie service geeft het volgende JSON geformateerde antwoord:
    • access_token, het JWT token uit de vorige stap.
    • token_type: altijd ‘bearer’
    • expires_in: idem als de exp uit het access_token.
    • scope:  idem als de scope uit het access_token.
  • De applicatie kan nu de FHIR resource service benaderen door gebruik te maken van het access_token. Het access token wordt  in het request in de HTTP Authorization header meegegeven in het volgende formaat:

    Code Block
    Authorization: Bearer {{access_token}}


  • De FHIR resource service ontvangt het access_token en valideert deze door middel van de public keys beschikbaar in de inhoud van de JWKS URL van de autorisatie service. De Key ID (kid) header in het access_token moet voorkomen als entry in het JWKS bestand. Deze is in de .well-known/smart-configuration van de FHIR resource service beschikbaar.
  • De  FHIR resource service interpreteert de permissies zoals deze in de scope zijn weergegeven en beperkt de  toegang van de applicatie op basis van deze permissies.

...