Helsenorge eller PVK som system- på vegne av innbygger
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. Se UseCases her: Kall fra Helsenorge og PVK til andre systemer
I dette tilfellet vil alle API kall inneholde et JWT systemtoken som er uttedt 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.