5. Helsenorge kaller ekstern applikasjon- systemkontekst
Introduksjon
I enkelte tilfeller vil Helsenorge eller PVK kalle eksterne systemers API’er på vegne av innbygger uten at innbygger nødvendigvis er logget inn. Dette gjøres dersom Helsenorge henter informasjon fra eksternt system på vegne av innbygger, eller Helsenorge leverer r informasjon til eksternt system på vegne av innbygger. Innbygger kan i noen tilfeller være innlogget når hendelsen “trigges”, men selve dataoverføringen vil kunne skje uten at innbygger (lenger) er innlogget.
I dette tilfellet vil alle API kall inneholde et JWT systemtoken som er utstedt av Helsenorge STS.
JWT System token
Alle metodekall benytter POST og vil inneholde et JWT-token utstedt av Helsenorge STS. For replikeringsmeldinger om endret status på Personverninnstillinger i PVK benyttes et SystemToken (dette fordi endringen ikke nødvendigvis skjer direkte fra innbygger selv via Helsenorge, eller at endringen replikeres ved "retry-situasjoner" etter at innbygger er logget ut.).
For tjenester som ikke benytter seg av basic authentication så overføres tokenet via HTTP headeren:
Authorization: Bearer <<Tokenverdi>> |
---|
Dersom basic authentication allerede benyttes, benyttes custom header som bærer av tokenet:
X-Authorization: Bearer <<Tokenverdi>> |
---|
Header
Claim key | Claim navn | Beskrivelse |
---|---|---|
alg | Algorithm |
|
kid | Key ID | Thumbprint til sertifikatet som ble benyttet til å generere token.
|
typ | Type | Type token det er, vil alltid være "JWT" |
ver | Version | Egendefinert header-verdi som sier hvilken versjon tokenet er |
typ_2 | Type 2 | Egendefinert header-verdi som sier hvilken type JWT som Helsenorge utsteder. Vil være "system_ws_sync" |
Payload
Claim key | Claim navn | Beskrivelse |
---|---|---|
scp | Scope | Vil inneholde en liste (separert med mellomrom) over hvilke dataområder/opplysninger som tokenet gir klienten (client_id) tilgang til. API/systemet som mottar tokenet fra Helsenorge må validere at det “scope” deres data representerer er inkludert i JWT-tokenet før det gis tilgang. For mulige verdier se: Gruppering av opplysninger om innbygger (informasjonselementer), for tilgangstyring |
client_id | Client Id | En GUID som identifiserer system klienten på Helsenorge som utfører kallet. Mottager trenger ikke forholde seg til denne verdien. |
client_name | Client Name | Navnet til system klienten på Helsenorge som utfører kallet. Mottager trenger ikke forholde seg til denne verdien. |
endusertype | End user type | Hva slags sluttbruker tokenet er utstedt til. Vil alltid være "system" |
aud | Audience | API/systemet som mottar tokenet fra Helsenorge bør validere at verdien i “aud” er lik den identifikator som er avtalt å benytte mellom partene. For PVK er dette den "partKode" som er avtalt mellom partene og som definerer "eier" av den aktuelle personverninnstilling. |
nbf | Not Before | Tidspunktet fra når tokenet er gyldig. Vil alltid ha samme verdi som tidspunktet det ble generert på |
exp | Expiration Time | Tidspunktet for når tokenet utløper. Standard er 20 minutter |
iat | Issued At | Tidspunktet for når tokenet ble generert |
iss | Issuer | Hvem som har generert tokenet, vil alltid være "sikkerhet.helsenorge.no" |
Eksempel
Encoded
eyJhbGciOiJSUzI1NiIsImtpZCI6IkY0NkVDQjI5RjhCOTk5NEQyMjg2QjA3M0MxQ0VBNkE1MkJCNzQ2RkMiLCJ0eXAiOiJKV1QiLCJ2ZXIiOjEsInR5cF8yIjoic3lzdGVtX3dzX3N5bmMifQ.eyJqdGkiOiI1NmRkMmM2MC1hMTljLTRjODctYTZlNi00YmYxYjJiNTViYTQiLCJzY3AiOiJwZXJzb252ZXJuaW5uc3RpbGxpbmdlciIsImNsaWVudF9pZCI6ImVmNWRjZDA5LTMwMjUtNDJhNC04ZDgyLTE5ZjVmNzMwMDY2ZiIsImNsaWVudF9uYW1lIjoiU2VuZE1lbGRpbmdUaWxBa3RvciBCYXRjaCIsImVuZHVzZXJ0eXBlIjoic3lzdGVtIiwiYXVkIjoiUkYiLCJuYmYiOjE2MDI2NTgzMjUsImV4cCI6MTYwMjY1OTUyNSwiaWF0IjoxNjAyNjU4MzI1LCJpc3MiOiJzaWtrZXJoZXQuaGVsc2Vub3JnZS5ubyJ9.GMhNdOlxrDnI8CaCi3pqpPL4YPAIRpCeXTTNh3YTOnOAO8vYnCCdFJ6OKewv3E0agcGIPPHAmHYuFGuRzuil1AhaGmVjwXFoPjuN1GVa8ZPXWXUGhhYABwRr4di7eDn1WxH3mYLfbK9SxEWHrzsaon1J0HEcVcnZUUxf8v3mSN760cS6YyzJWlT_CMmQHhB5wjbvyNXXj4uiJZdsC26StVCtJ9_fzrU08R9CVnTi6cbJwNGbEg_QZ3eIzBF8l6iQCY7Zwn2fc7o91gbiM2XvOFStOxFfGk4mPh_NbhxakqwpJdkFAAYI3yLKKFCXnj5FtA43sp020BcKXHsa3TT38w
Decoded
Hvordan parse og validere
Det finnes mange 3. parts biblioteker som gjør det enkelt å lese ut data fra tokenet og å validere det. Siden https://jwt.io. har en oversikt over ulike JWT-biblioteker for ulike tekniske plattformen, i tillegg til en fin JWT dekoder. Det eksterne systemet er ansvarlig for å validere innholdet i JWT tokenets payload i henhold til sine forretningsregler (se beskrivelse i tabellen over). Vi anbefaler at det benyttes 5 minutter’s “clock skew” ved validering at “nfb”, “exp” og “iat”.
Endepunkt der signeringssertifikat kjeden kan hentes ut
Dersom ekstrent system har tilgang til Internett:
Prod: https://eksternapi.helsenorge.no/sts/helsenorge-oidc-provider/v2/jwk
Test-01: https://eksternapi.hn.test.nhn.no/sts/helsenorge-oidc-provider/v2/jwk
Dersom eksternt system kun har tilgang til Helsenettet:
Prod: https://eksternapi-helsenett.helsenorge.no/sts/helsenorge-oidc-provider/v2/jwk
Test-01: https://eksternapi-helsenett.hn.test.nhn.no/sts/helsenorge-oidc-provider/v2/jwk
Sertifikatet som er benyttet i signeringen av JWT har den key-identifier som finnes i JWT header (“kid” i Header). Dvs. at jwk-endepunktet returnerer dette sertifikatet og resten av sertifikatkjeden opp til “Root-CA”. Det er derfor kun behov for å hente sertifikatkjede på nytt fra JWK-endepunktet dersom “kid” i JWT-tokenet endres.