DPoP
DPoP (Demonstrating Proof of Posssession in the Application Layer) er en effektiv mekanisme som beskytter mot tyveri av tokens.
Bakgrunn
Sikring av ressurser (som for eksempel et REST-API) med bruk av OAuth 2.0 har tradisjonelt vært gjort med bruk av såkalte bearer tokens. Et bearer token er et token som enhver som har tilgang til det kan bruke. Spesifikt vil bruken av et bearer token ikke kreve at den som bruker det legitimerer bruken ved et kryptografisk bevis.
Som en følge av dette er tokentyveri den største enkelttrusselen mot token-basert autentisering. DPoP retter opp dette problemet ved å sikre at kun den riktige mottakeren av et token kan bruke dette mot et API.
Funksjonalitet
DPoP fungerer ved at klienten har tilgang til en hemmelighet (en privatnøkkel) som den må bruke både i kall mot HelseID for å hente ut tokens og ved kall til et API hvor tokenet gir tilgang.
Ved uthenting av tokens fra HelseID vil klienten legge ved et DPoP-bevis, dette er i praksis en JWT signert med hemmeligheten til klienten. HelseID utsteder så et Access Token som inneholder et nytt claim, cnf, som forteller hvilket nøkkelpar som ble brukt. Senere når klienten ønsker å kalle et API legger de ved Access Tokenet men de legger også ved et nytt DPoP-bevis som dokumenterer at klienten har tilgang på den samme privatnøkkelen som tidligere.
Detaljert beskrivelse av DPoP-kall mot token-endepunktet
Sikring av privatnøkkel
Privatnøkkelen som brukes til å signere DPoP-beviset, må sikres på samme måte som privatnøkkelen som brukes for klientautentisering. Dette er beskrevet i HelseIDs sikkerhetsprofil.
I kontekst av HelseID kan du sikre et DPoP-bevis på to forskjellige måter:
- du kan bruke den samme privatnøkkelen som du bruker for å signere klientautentiseringen (client assertion) eller
- du kan generere nye nøkkelpar ved behov
Godkjente signeringsalgoritmer er beskrevet i dette dokumentet.
Formattering av et DPoP-bevis
DPoP-beviset må formateres på en bestemt måte; dette er beskrevet her.
Bruk av nonce
HelseID krever at klienten må gjøre to kall til token
-endepunktet for å få utlevert et DPoP-token. Ved det første kallet vil HelseID gi tilbake HTTP-kode 400 med feilmelding use_dpop_nonce
. Det blir lagt ved en header med navnet DPoP-Nonce
som har en tilfeldig verdi som innhold. Denne verdien må innlemmes i et nytt DPoP-bevis, som blir vedlagt til det andre kallet til HelseID. En grundigere beskrivelse av denne funksjonaliteteten finner du her.
Krav til klientens sikring av nøkler for DPoP
Beskrevet i eget dokument. Lenke kommer.
Krav til API-ets sikring av DPoP-kall mot API
For at alt dette skal ha noen verdi, må API-et som validerer DPoP-tokenet også validere DPoP-beviset som følger med. Dette er beskrevet her.