DPoP
DPoP (Demonstrating Proof of Posssession in the Application Layer) er en effektiv mekanisme som beskytter mot tyveri av Access-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 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 Access-token kan bruke dette tokenet 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 Token-endepunktet i 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
Når du gjør et DPoP-kall mot Token-endepunktet, stilles det enkelte krav til innholdet i kallet.
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 sikkerhetsprofilen: Bruk av hemmeligheter for klienter.
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 client assertion for klientautentisering eller
- du kan generere nye nøkkelpar ved behov
Godkjente signeringsalgoritmer er beskrevet i sikkerhetsprofilen: Krav til kryptografi.
Formatering av et DPoP-bevis
DPoP-beviset må formateres på en bestemt måte; dette er beskrevet i sikkerhetsprofilen for HelseID: Formatering av DPoP-bevis.
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 i denne delen av spesifikasjonen.
Krav til API-ets sikring av DPoP-bevis
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 i sikkerhetsprofilen for HelseID: Validering av DPoP-bevis.