Altinn PDP
altinn-pdp-rest-server er en tjeneste som svarer på om en systembruker eller
person har tilgang til en gitt ressurs i Altinn. Tjenesten leveres som et JSON-basert REST-grensesnitt på SKIP,
tilgjengelig via intern cluster-trafikk på http://altinn-pdp-rest-server.tilgangsstyring-altinn:8080.
🎯 Hvorfor PDP-oppslag?
Et gyldig Maskinporten-token med systembrukerinformasjon beviser at en systembruker er autentisert, men ikke hvorvidt denne har lov til å opptre på vegne av en organisasjon og med en gitt handling på en gitt ressurs – se Maskinporten med Altinn-systembruker. For å avgjøre dette må API-tilbyderen selv gjøre et PDP-oppslag mot Altinn sitt Policy Decision Point.
Ved bruk av Ansattporten med Altinn-roller gjør
Ansattporten selv PDP-oppslaget mot Altinn Autorisasjon under innloggingen, for ressursen(e) og actions som ble
forespurt i authorization_details. Resultatet er allerede bakt inn i tokenet, og tjenesten din trenger derfor
vanligvis ikke et eget PDP-kall for å validere representasjonen.
Et eget PDP-oppslag for en person (med pid) kan likevel være aktuelt i tjenesten din dersom du trenger å sjekke
tilgang til en ressurs eller action som ikke var kjent på innloggingstidspunktet, eller vil re-validere tilgangen
senere i en langvarig sesjon.
Din applikasjon må altså gjøre to uavhengige sjekker:
- Token-validering (i applikasjonen selv, eventuelt via Ztoperator/Accesserator): at tokenet er gyldig, og at det
inneholder riktig scope (Maskinporten) eller er på riktig autentiseringsnivå (Ansattporten). I tillegg må
applikasjonen selv lese ut hvilken organisasjon systembrukeren eller personen opptrer på vegne av fra tokenets
authorization_details-claim (systemuser_orgfor en systembruker,authorized_parties[].orgnofor en person). Denne organisasjonen brukes så videre i PDP-oppslaget - PDP-oppslag (via
altinn-pdp-rest-server): at systembrukeren eller personen faktisk har fått tildelt tilgang i Altinn til å utføre den aktuelle handlingen på den aktuelle ressursen, på vegne av den aktuelle organisasjonen. Handlingen er en fritekst-action, f.eksreadellerwrite, og hvilke handlinger som finnes for en gitt ressurs er definert i Altinn sitt ressursregister for den ressursen. Det er altså ressurseier, ikkealtinn-pdp, som bestemmer hvilkeaction-verdier som er gyldige å spørre om
🔎 Hvordan gjøre et PDP-oppslag?
Tjenestens API er dokumentert med OpenAPI på kartverket.dev og i GitHub-repo.
Eneste endepunkt er POST /authorize. Dette tar inn:
systemuserId(for en systembruker) ellerpid(fødselsnummer/D-nummer, for en person)resourceId- hvilken Altinn-ressurs, som du må vite på forhåndcustomerOrganizationNumber- hvilken organisasjon subjektet opptrer på vegne avaction- hvilken handling, f.eksreadellerwrite
Responsen inneholder:
permit(boolean) -truedersom tilgang er gitt,falseellers. De aller fleste kallende applikasjoner trenger kun å forholde seg til dette feltetdecision- den underliggende XACML-beslutningen fra Altinn:PERMIT,DENY,NOT_APPLICABLE(ingen matchende policy ble funnet, ikke nødvendigvis en feil) ellerINDETERMINATE(PDP-en klarte ikke å evaluere forespørselen). KunPERMITgirpermit: trueminimumAuthenticationLevel- dersom satt, er en eventuellPERMITbetinget av at sluttbrukeren var logget inn på minst dette autentiseringsnivået - dette må kallende applikasjon selv verifisere, PDP-en sjekker det ikke for degstatus- Altinn sin XACML-statuskode, til feilsøking
🔐 Tilgangsstyring til applikasjonen
Hvilke applikasjoner på SKIP som har lov til å spørre om hvilke ressurser styres av altinn-pdp-access-control.
Tjenesten bruker en innebygd mekanisme på SKIP kalt SPIFFE til å identifisere workloads, og validerer tilgang opp mot
reglene konfigurert i altinn-pdp-access-control.
For å gi din applikasjon tilgang:
- Åpne en pull request mot
altinn-pdp-access-control, der du legger inn eller utvider din workload idata.resource_accessfor ressursen(e) du trenger, i miljøet(ene) (dev,prod, eller begge) du trenger dem i. Ressurser kan gis som eksakt match (foretrukket) eller prefiks-match. - Team Tilgangsstyring reviewer, merger og deployer pull requesten. Når den er deployet har din workload tilgang til å utføre PDP-autorisasjon for de gitte ressursen(e) i de valgte miljøene
Du kan bruke Copilot-skillet opa-access-policy-pr (.github/skills/opa-access-policy-pr/SKILL.md i
altinn-pdp-access-control) til å forberede PR-en, eller redigere opa/data/<env>/resource_access/data.json-filene
manuelt og åpne en PR på vanlig måte.