PAR for tjenesteeiere og arkitekter

PAR (Pushed Authorization Requests) er en mekanisme som gir HelseID-klienter mulighet for å la informasjonen i en brukerpålogging fra klient til HelseID gå direkte fra klienten til HelseID, snarere enn gjennom nettleseren.

Historisk flyt i OAuth 2.0/OpenID connect

Når en klient vil logge på en bruker ved hjelp av HelseID, har flyten Authorization Code blitt brukt. Denne flyten foregår på den måten at klienten dirigerer brukeren til nettleseren for å la brukeren få tilgang til /authorize-endepunktet (heretter kalt autorisasjons-endepunktet) på HelseID-tjeneren. I kallet til autorisasjons-endepunktet vil klienten sende ved informasjon om hvilket type kall det er snakk om (klientens identitet, hvilken identitetsleverandør som skal benyttes, organisasjonsnumre etc.). Diagrammet under viser denne flyten:

non_pushed_auth.drawio.png
Gammel flyt: diagrammet viser ikke selve brukerpåloggingen

Bruken av denne flyten er problematisk i kontekst av sikkerhet, personvern, og også med tanke på at informasjonsinnholdet kan være for stort for bruk av GET-verbet fra nettleseren mot autorisasjons-endepunktet:

  • Flyten gir ingen mekansisme for å sikre konfidensialiteten til request-parametrene. Selv om TLS brukes for å sikre autorisasjons-endepunktet, vil informasjonen gå gjennom nettleseren, og query-strengen kan lekkes, blant annet til logger.

  • Flyten (uten bruk av Request Object) gir ingen beskyttelse for kryptografisk integritet og autentisitet for innholdet. En angriper kan for eksemel kunne endre scopes eller endre informasjon om organisasjonsnummer. HelseID har tiltak for denne typen angrep, men det gir økt robusthet å hindre muligheten for at de kan nyttiggjøres av en angriper.

  • Med alt innholdet i request-URL-en, kan den bli svært stor, slik at et GET-verb ikke kan brukes. Da må nettleseren bruke POST-verbet, og det gjør utviklingen av koden til kallet tungvindt.

Ny flyt (Pushed Authorization Requests / PAR)

PAR gjør det enklere å fjerne problematikken slik som den er beskrevet ovenfor.

  • HelseID introduserer et nytt endepunkt: /par-endepunktet

  • Klienten sender inn informasjonen som trengs for brukerpålogging gjennom dette endepunktet, og ikke gjennom nettleseren

  • HelseID autentiserer klienten i dette kallet, og lagrer informasjonen lokalt

  • Klienten får tilbake et såkalt «request_uri»-parameter, som er en engangsstreng for pålogging

  • Klienten bruker denne strengen i nettleseren, og brukeren kan logge seg på (som før)

  • Resten av flyten er identisk med den historiske flyten

pushed_auth.drawio.png
Ny PAR-flyt: diagrammet viser ikke selve brukerpåloggingen

Sikkerhetsprofilen til HelseID stiller krav til at alle nye klienter må bruke denne mekanismen. Vi anbefaler at alle eksisterende klienter tar i bruk denne mekanismen så raskt som mulig.