Autorisasjonskontekster
Referanseinformasjon om autorisasjonskontekster
For bleeding edge, select "Dev", as this contains the most recent unreleased changes to the Dialogporten API. Select "Local dev" if you want to test changes to Dialogporten itself running locally.
Introduksjon
Se komme i gang med autorisasjonskontekster for en funksjonell oversikt over autorisasjonskontekster og hva de kan brukes til. Denne siden dekker hele skrivekontrakten, valideringsreglene og den nøyaktige effekten på sluttbruker-API-et.
Hvor autorisasjonskontekster kan settes
En authorizationContext kan oppgis på tjenesteeierens endepunkter for opprettelse og oppdatering, på disse feltene:
| Del | Felt |
|---|---|
| API-handlinger | apiActions[].authorizationContext |
| GUI-handlinger | guiActions[].authorizationContext |
| Forsendelser | transmissions[].authorizationContext |
| Vedlegg på dialogen | attachments[].authorizationContext |
| Vedlegg på forsendelser | transmissions[].attachments[].authorizationContext |
| Navigasjonshandlinger på forsendelser | transmissions[].navigationalActions[].authorizationContext |
Alle seks delene deler nøyaktig samme authorizationContext-form - et vedlegg eller en navigasjonshandling kan navngi en action på samme måte som en API- eller GUI-handling kan, selv om det i praksis nesten alltid vil stå usatt (se feltet action under).
Dette gjelder både endepunktene for opprettelse og oppdatering av dialoger, og de egne endepunktene for opprettelse og oppdatering av forsendelser.
Selve konteksten kan bare leses tilbake av tjenesteeieren. authorizationContext er med i tjenesteeierens lese-DTO-er (svaret fra dialog-GET-et og tjenesteeierens forsendelsesendepunkter), men finnes ikke på noen sluttbruker-DTO. Dette er en bevisst konfidensialitetsegenskap: en autorisasjonskontekst kan navngi bestemte parter, og å publisere den listen til en sluttbruker ville avslørt hvilke andre parter som kan ha tilgang til en gitt del av dialogen. Sluttbrukere ser bare effekten av en kontekst: isAuthorized, feltene som maskeres eller det at entiteten utelukkes (beskrevet nedenfor), og entitetens oppføring i dialogtokenets e-claim.
GraphQL følger samme mønster: det eksponerer isAuthorized og excluded*-listene på sluttbrukerentitetene, men ikke selve autorisasjonskonteksten.
Uten autorisasjonskontekst
authorizationContext er valgfritt på alle delene. Utelates den, følger entiteten dialogens egen tilgang, evaluert på vegne av dialogens egen part, akkurat som før autorisasjonskontekster fantes:
| Del | Uten authorizationContext |
|---|---|
| API- og GUI-handlinger | Det øverste action-feltet (påkrevd i dette tilfellet) evalueres mot dialogens hovedressurs, eller mot authorizationAttribute hvis det er satt. |
| Forsendelser | read evalueres mot authorizationAttribute hvis det er satt. Ellers følger forsendelsen dialogens egen tilgang. |
| Dialogvedlegg | Følger dialogens egen tilgang. |
| Forsendelsesvedlegg og navigasjonshandlinger | Følger forsendelsen de tilhører. |
En slik entitet er ikke oppført i e-claimet i dialogtokenet; handlinger uttrykkes i a-claimet, som før.
Merk forskjellen på å utelate konteksten og en kontekst med bare parties: utelates den, gis samme tilgang som til dialogen, mens en kontekst med bare parties evaluerer kun de oppgitte partene, og utelukker dialogpartens egne folk med mindre en oppføring i dialogPartyChecks tar dem med.
Felt
serviceResource
Type string, valgfritt.
Overstyrer dialogens egen tjenesteressurs for denne ene sjekken, slik at evalueringen rettes mot en annen ressurs’ policy. Når feltet settes, evalueres konteksten som en forespørsel mot bare den ressursen - dialogens egen instansreferanse følger ikke med, på samme måte som ressursoverstyringen i det gamle autorisasjonsattributtet.
Må starte med urn:altinn:resource: og ellers følge det vanlige formatet for Altinn-ressursidentifikatorer. Maks 255 tegn.
Den autentiserte tjenesteeieren må eie ressursen det refereres til. Å referere til en ressurs som den som kaller ikke eier, feiler hele opprettelsen eller oppdateringen med 403 Forbidden.
additionalResourceAttribute
Type string, valgfritt.
Et underressurs- eller oppgaveattributt som matches innenfor den effektive ressursens policy - for eksempel urn:altinn:task:Task_1 eller urn:altinn:subresource:mycustomresource. I motsetning til et gammelt autorisasjonsattributt overstyrer dette aldri ressursen alene; det legges oppå den ressursen som gjelder (dialogens egen, eller den som er satt med serviceResource).
Et bart navn uten et gjenkjent navnerom-prefiks behandles som urn:altinn:subresource:<navn>.
Må ikke starte med urn:altinn:resource: - bruk serviceResource til det. Det kan heller ikke referere til en app (navnerommet urn:altinn:app:, eller en verdi som utvides til en app_{org}_{appId}-identifikator) eller til en organisasjon (urn:altinn:org:): appen bæres allerede av oppføringen i Ressursregisteret som serviceResource navngir, og organisasjonen som eier den effektive ressursen, utledes fra ressursen selv. Samme format- og lengderegler som serviceResource.
parties
Type liste av string, valgfritt.
Andre parter enn dialogens egen som sjekken evalueres på vegne av, hver på sin egen part og uten tilgangsbegrensning. Tilgang gis hvis PDP-en tillater minst én av de oppgitte partene, eller minst én av dialogPartyChecks (ELLER-semantikk), ikke alle sammen.
- Sammen med
dialogPartyChecksminst 1 og maks 4 oppføringer. - Oppføringene må være unike.
- Kan ikke inneholde dialogens egen part. Bruk en oppføring i
dialogPartyChecksmedaccessRestriction: "None"til det - den evaluerer nøyaktig det samme, og samler dialogens part på ett sted, der en tilgangsbegrensning kan gjelde for den. - Hver oppføring må være en gyldig partsidentifikator:
urn:altinn:organization:identifier-no:{orgnr},urn:altinn:person:identifier-no:{fnr/dnr},urn:altinn:party-identifier:username:{username}, eller en ID-porten-e-postidentifikator.
En autorisasjonssjekk uten parter eller dialogpartssjekker å evaluere kan aldri bli autorisert - den feiler lukket i stedet for å gi tilgang implisitt.
dialogPartyChecks
Type liste av objekter, valgfritt.
Sjekker som evalueres på vegne av dialogens egen part. Hver sjekk kan kreve at sluttbrukerens tilgang til dialogens part er oppnådd på en bestemt måte, og kan angi sin egen ressurs og handling. Tilgang gis hvis minst én sjekk, eller minst én oppføring i parties, tillater det. Utelates feltet, eller er listen tom, evalueres ikke dialogens egen part i det hele tatt – da gis tilgang bare gjennom partene i parties. Skal dialogpartens folk ha tilgang, må konteksten ha en sjekk, for eksempel { "accessRestriction": "None" }.
Hver sjekk har disse feltene:
| Felt | Type | Beskrivelse |
|---|---|---|
accessRestriction | string-enum, påkrevd | Hvordan sluttbrukerens tilgang hos dialogens part må være oppnådd for at sjekken skal gi tilgang. Se tabellen nedenfor. |
viaParty | string | Organisasjonen sluttbrukerens tilgang må være klientdelegert gjennom, som urn:altinn:organization:identifier-no:{orgnr}. Påkrevd når accessRestriction er ClientDelegation, og ikke tillatt ellers. Kan ikke være dialogens egen part. |
serviceResource | string | En tjenesteressurs som evalueres i stedet for kontekstens. Faller tilbake til kontekstens serviceResource, og deretter til dialogens egen ressurs. Samme regler som kontekstens serviceResource, også at du må eie den. |
action | string | Handlingen som evalueres i stedet for kontekstens. Faller tilbake til kontekstens action, og deretter til read. |
Kontekstens additionalResourceAttribute, hvis satt, legges oppå den effektive ressursen til hver sjekk.
accessRestriction | Gir tilgang når sluttbrukeren har tilgang hos dialogens part … |
|---|---|
None | … på hvilken som helst måte. Slik har dialogens egen part alltid blitt evaluert, og dette erstatter det tidligere includeDialogParty: true. |
DirectAndHierarchy | … som ikke går gjennom en annen organisasjon: rettigheter gitt direkte hos dialogens part, ER-roller hos dialogens part og rettighetene de gir, og tilgang arvet fra hovedenheten. Tilgang sluttbrukeren har gjennom en klientdelegering, for eksempel som ansatt i et regnskapsbyrå, teller ikke. |
ClientDelegation | … bare gjennom en klientdelegering gjort gjennom organisasjonen i viaParty. Tilgang sluttbrukeren har direkte, eller gjennom en annen mellommann, teller ikke. |
Begrensningen evalueres av Altinn Authorization i den samme beslutningsforespørselen, så en sjekk med begrensning koster én evaluering, akkurat som en uten.
Et typisk bruksområde er en dialog der flere mellommenn opptrer for den samme parten, og hver mellommann bare skal se «sine» forsendelser:
{
"transmissions": [
{
// Synlig for dialogpartens egne folk, og for den som opptrer for den gjennom regnskapsbyrå 1
"authorizationContext": {
"dialogPartyChecks": [
{ "accessRestriction": "DirectAndHierarchy" },
{ "accessRestriction": "ClientDelegation", "viaParty": "urn:altinn:organization:identifier-no:912345678" }
],
"unauthorizedPresentation": "Excluded"
}
},
{
// Synlig for dialogpartens egne folk, og for den som opptrer for den gjennom regnskapsbyrå 2
"authorizationContext": {
"dialogPartyChecks": [
{ "accessRestriction": "DirectAndHierarchy" },
{ "accessRestriction": "ClientDelegation", "viaParty": "urn:altinn:organization:identifier-no:987654321" }
],
"unauthorizedPresentation": "Excluded"
}
}
]
}
Regler for listen som helhet:
- To sjekker kan ikke evaluere det samme: sjekker med samme
accessRestriction,viaParty, effektiveserviceResourceog effektiveactionavvises som duplikater. Ved sammenligningen faller en sjekksserviceResourceogactiontilbake til kontekstens, ogactionvidere tilread. Dialogens egen ressurs fylles ikke inn, fordi en sjekk som navngir den eksplisitt evalueres uten dialogens instansreferanse, og dermed er en annen forespørsel (seserviceResource). - En
DirectAndHierarchy- ellerClientDelegation-sjekk avvises hvis det også finnes enNone-sjekk for den samme effektive ressursen og handlingen, sidenNone-sjekken allerede gir alt den begrensede ville gitt.
includeDialogParty: true kombinert med additionalResourceAttribute var tidligere den direkte erstatningen for et gammelt underressursattributt; det tilsvarende er nå dialogPartyChecks: [{ "accessRestriction": "None" }] kombinert med additionalResourceAttribute.
action
Type string, valgfritt, på alle delene - det finnes ingen del der feltet er påkrevd eller utilgjengelig.
XACML-handlingen som skal evalueres. Hvis feltet utelates, brukes read som standard.
action stå usatt på en API- eller GUI-handling - den evalueres da bare som read. Siden disse to delene nesten alltid finnes for å beskytte noe annet enn en ren lesehandling (write, sign og liknende), er en usatt action her mer sannsynlig en feil enn et bevisst valg - dobbeltsjekk at feltet faktisk er satt når du gir en API- eller GUI-handling en kontekst.I motsetning til det gamle autorisasjonsattributtet utledes action aldri fra serviceResource eller additionalResourceAttribute. Å avgrense hvilken ressurs sjekken gjelder, avgrenser ikke hvilken handling den gjelder. En kontekst som setter additionalResourceAttribute og lar action stå usatt, evaluerer likevel et rent read på den avgrensede ressursen, og hvis det allerede finnes en bredere read-regel på hovedressursen, kan den fortsatt matche - XACML-målmatching kontrollerer bare at attributtene en regel krever er til stede, ikke at ingen andre attributter er det, så det ekstra ressursattributtet utelukker ikke i seg selv den bredere regelen. For å faktisk avgrense tilgangen, gi konteksten en egen action - for eksempel elementread - og skriv (eller gjenbruk) en policyregel som matcher på den handlingen sammen med den avgrensede ressursen.
Maks 255 tegn.
I sluttbruker-API-et rapporterer action-feltet på entiteten alltid handlingen som faktisk ble evaluert: kontekstens action når den navngir en, og read når den ikke gjør det. I tjenesteeier-API-et holdes de to fra hverandre - det gamle action-feltet på øverste nivå leses tilbake som en tom streng for en entitet som bruker en kontekst, og den evaluerte handlingen finner du i authorizationContext.action.
tokenRef
Type string, valgfritt. Maksimalt 50 tegn; kan ikke være blankt når det er satt.
En referanse du velger selv, som identifiserer denne konteksten i dialogtokenet. Når sluttbrukeren er autorisert for konteksten, lister tokenets e-claim opp denne verdien i stedet for ID-en til entiteten som har konteksten, slik at en mottakende tjeneste kan gjenkjenne rettigheten uten å holde styr på Dialogportens entitets-ID-er. Flere kontekster kan dele samme tokenRef; det er tillatt, og tokenet lister den da opp én gang - nyttig når den mottakende tjenesten skal sjekke én referanse for en hel gruppe entiteter. Dialogporten sjekker ikke tokenRef for unikhet eller for kollisjoner med entitets-ID-er, siden både kontekstene og sjekken på mottakersiden er dine; pass på å ikke gjenbruke en referanse for entiteter som skal autoriseres hver for seg.
tokenRef leses tilbake på tjenesteeierflaten sammen med resten av konteksten, og eksponeres aldri for sluttbrukere på annen måte enn gjennom tokenet.
unauthorizedPresentation
Type string-enum, verdiene Disabled eller Excluded. Påkrevd.
Selv om feltet ikke er markert som påkrevd i OpenAPI-schemaet, blir det avvist ved validering å utelate det - det finnes ingen standardverdi. Det må settes eksplisitt til en av de to verdiene under.
Disabled(sperret) lar entiteten bli liggende i listen den hører til, men maskerer URL-ene og de innebygde innholdsreferansene. Dette tilsvarer måten det gamle autorisasjonsattributtet alltid har oppført seg på, og er den anbefalte verdien når du migrerer en eksisterende dialog uten å ønske å endre hva sluttbrukere ser.Excluded(utelukket) fjerner entiteten helt fra den listen, og lar bareidogcreatedAtstå igjen i enexcluded*-liste ved siden av. Se de to neste avsnittene for den nøyaktige effekten.
Hva en uautorisert sluttbruker ser
Disabled: blir liggende, URL-ene maskeres
Entiteten blir liggende der den er i listen sin, isAuthorized er false, og entiteten står ikke i dialogtokenets e-claim. Alt entiteten forteller om seg selv, er fortsatt lesbart; bare det som ville latt sluttbrukeren handle på den, erstattes.
URL-er erstattes med én av to plassholderverdier: urn:dialogporten:unauthorized ved nektet tilgang, og urn:dialogporten:expired for en utløpt URL på et vedlegg eller en navigasjonshandling - men plassholderen for utløpt brukes bare når den som spør er autorisert; en URL som både er uautorisert og utløpt, viser plassholderen for uautorisert.
| Del | Effekt |
|---|---|
| GUI-handling | url erstattes med plassholderen. title, prompt, priority, httpMethod, isDeleteDialogAction, action og id beholdes alle. |
| API-handling | Hver endepunkt-url erstattes med plassholderen; de andre endepunktfeltene (version, httpMethod, documentationUrl, requestSchema, responseSchema, deprecated, sunsetAt) beholdes, det samme gjør name og id. |
| Forsendelse | Innholdsreferansen (brukt til front channel embed) erstattes med plassholderen. content.title og content.summary forblir lesbare. sender, type, extendedType, externalReference, relatedTransmissionId, attachments og navigationalActions består alle, og hver underliggende del vurderes på egne premisser, slik radene under viser. |
| Vedlegg på dialogen | Hver URL erstattes med plassholderen. displayName, name og expiresAt beholdes. |
| Vedlegg på forsendelse | Hver URL erstattes med plassholderen. displayName, name og expiresAt beholdes. |
| Navigasjonshandling på forsendelse | url erstattes med plassholderen. title og expiresAt beholdes. |
Excluded: fjernet fra listen sin
Entiteten er ikke med i svaret i det hele tatt. Det finnes ingen oppføring med isAuthorized: false å finne, og ingen oppføring i dialogtokenets e-claim. Det eneste som står igjen, er en stubb i en liste ved siden av, med to felt og ikke noe mer:
{
"id": "0194a1b2-3c4d-7e5f-8a9b-0c1d2e3f4a5b",
"createdAt": "2026-01-15T09:12:44.512Z"
}
createdAt er det som lar et sluttbrukersystem plassere hullet: systemet kan vise at noe det ikke får se, ligger mellom to forsendelser det får se, i stedet for å vise en liste som stille er blitt kortere.
Hver liste som kan ha en autorisasjonskontekst, har sin egen skyggeliste, oppkalt etter den og plassert rett ved siden av:
| Liste | Skyggeliste |
|---|---|
apiActions | excludedApiActions |
guiActions | excludedGuiActions |
attachments | excludedAttachments |
transmissions | excludedTransmissions |
transmissions[].attachments | transmissions[].excludedAttachments |
transmissions[].navigationalActions | transmissions[].excludedNavigationalActions |
Alle seks kan være null og utelates helt fra JSON-en når ingenting er utelukket, noe som er det normale - behandle en liste som mangler, på nøyaktig samme måte som en tom liste. GraphQL eksponerer de samme seks feltene, med typen [ExcludedElement!].
{
"transmissions": [
{
"id": "...",
"attachments": [ /* ... */ ],
"navigationalActions": [ /* ... */ ],
"excludedAttachments": [ { "id": "...", "createdAt": "..." } ],
"excludedNavigationalActions": [ { "id": "...", "createdAt": "..." } ]
}
],
"guiActions": [ /* ... */ ],
"apiActions": [ /* ... */ ],
"attachments": [ /* ... */ ],
"excludedTransmissions": [ { "id": "...", "createdAt": "..." } ],
"excludedGuiActions": [ /* ... */ ],
"excludedApiActions": [ /* ... */ ],
"excludedAttachments": [ /* ... */ ]
}
createdAt - leser den bare én av dem, rapporterer den for lite, stille og uten noen feil å fange opp.Fire ting som er verdt å ha i bakhodet:
isAuthorized: falsebetyr nøyaktig én ting. Det markerer en entitet som finnes, er beskrevet og ikke kan brukes - aldri en entitet som holdes tilbake. En utelukket entitet er rett og slett borte.- En utelukket forsendelse tar med seg de underliggende delene sine. Bare forsendelsens egen stubb dukker opp; vedleggene og navigasjonshandlingene rapporteres ikke separat, verken i skyggelistene til den forsendelsen eller andre steder. Et vedlegg eller en navigasjonshandling med sin egen
Excluded-kontekst inni en forsendelse som bare erDisabled(og nektet), utelukkes derimot individuelt, til skyggelisten på den forsendelsen. - Innhold på dialognivå (
content.mainContentReference) styres ikke av noen autorisasjonskontekst i det hele tatt - dialoginnhold har ingen egen kontekst. Synligheten avhenger utelukkende av om den som spør har lesetilgang til dialogens hovedressurs.
Slik oppfører endepunktene seg for utelukkede forsendelser
| Endepunkt | Oppførsel |
|---|---|
GET /dialogs/{id} | Utelukkede forsendelser forsvinner ut av transmissions og dukker opp som stubber i excludedTransmissions. |
GET /dialogs/{id}/transmissions/{transmissionId} | 403 Forbidden for en utelukket forsendelse - ikke 404. Dialogsvaret publiserer allerede at forsendelsen finnes, så det ville motsagt dialogsvaret å nekte for at den finnes her. Sjekken på dialognivå foran denne svarer derimot 404 for en dialog den som spør ikke får se; der er det dialogens eksistens som holdes tilbake. |
GET /dialogs/{id}/transmissions | Utelukkede forsendelser utelates fra listen, uten noen stubb. Svaret er en ren JSON-liste uten noe sted å henge en excludedTransmissions på øverste nivå, så bruk dialogendepunktet når du trenger å vite at noe er holdt tilbake. Utelukkelser inni en forsendelse som returneres, rapporteres som vanlig, på selve forsendelsen. |
Foreldre-først-avgrensing
En underordnet autorisasjonskontekst kan bare avgrense tilgang, aldri utvide den. Tilgang til forelderen er alltid en forutsetning:
- For en forsendelses vedlegg og navigasjonshandlinger er forsendelsens egen autorisasjon forutsetningen - en tillatende underordnet kontekst inni en nektet forsendelse gir ingenting, og den underordnede delen står ikke i dialogtokenets
e-claim uansett hva den underordnede konteksten alene ellers ville tillatt. - For vedlegg på dialogen er forutsetningen lesetilgang til dialogens hovedressurs. Et vedlegg på dialogen uten egen kontekst begrenses aldri individuelt - det arver dialogens egen tilgang.
Hvis den som spør ikke kan lese dialogens hovedressurs i det hele tatt, feiler GET /dialogs/{id} med 403 Forbidden før noen vurdering per entitet kjøres, med mindre listeautorisasjon gir en snevrere form for tilgang - i så fall returneres dialogen med handlingene sine markert som uautoriserte i stedet for at forespørselen avvises helt. De frittstående forsendelsesendepunktene har ingen slik reserveløsning: uten tilgang til hovedressursen svarer de 404 Not Found, som om dialogen ikke fantes.
Evaluering med flere parter
- Tilgang til en sjekk gis hvis minst én av evalueringene tillater det - ELLER-semantikk på tvers av både
partiesogdialogPartyChecks. - Hver oppføring i
partiesog hver dialogpartssjekk er én evaluering. Like evalueringer, innenfor eller på tvers av entiteter, slås sammen til én, men grensen på 4 oppføringer per kontekst er likevel en reell kostnadskontroll: hver distinkte kombinasjon av ressurs, handling, part og tilgangsbegrensning er én evaluering mot Altinn Authorization, og en dialog med mange autorisasjonskontekster øker dette raskt. - En tilgangsbegrensning gjelder bare evalueringen den er satt på. Siden evalueringene kombineres med ELLER, ville en ubegrenset evaluering av dialogens egen part ved siden av en begrenset gjort begrensningen meningsløs - derfor kan ikke
partiesinneholde dialogens egen part, og derfor kan ikke en begrenset sjekk kombineres med enNone-sjekk for den samme rettigheten. - Hvis samsvaret mellom forespurte sjekker og returnerte beslutninger av en eller annen grunn ikke stemmer, nektes alle sjekker for den berørte forespørselen - systemet feiler lukket i stedet for å gjette.
- En systembrukers egen part evalueres med systembrukerens egen identitet; parter som er navngitt direkte i en konteksts
parties-liste evalueres som seg selv og vil rett og slett bli nektet hvis PDP-en ikke anerkjenner dem som delegerbare til den som kaller - en systembruker kan ikke representere en vilkårlig part ved å navngi den i en kontekst.
Gjensidig utelukkelse med authorizationAttribute
En entitet kan ikke kombinere authorizationContext med det gamle feltet authorizationAttribute:
- På API-handlinger og GUI-handlinger må
authorizationAttributevære fraværende nårauthorizationContexter satt, og det øversteaction-feltet må også være fraværende eller tomt - brukauthorizationContext.actioni stedet. Motsatt eractionpåkrevd når det ikke finnes noen kontekst. I tjenesteeier-API-et leses en slik entitet tilbake medactionsom en tom streng, slik at etGET-svar kan sendes rett tilbake tilPUTuendret. - På forsendelser må
authorizationAttributevære fraværende nårauthorizationContexter satt. Det finnes ikke noe øversteaction-felt på forsendelser. - Vedlegg og navigasjonshandlinger på forsendelser har aldri hatt
authorizationAttribute- bareauthorizationContext.
De samme reglene gjelder på oppdateringsendepunktene og på de egne endepunktene for opprettelse og oppdatering av forsendelser.
Migrere fra authorizationAttribute
Gammelt authorizationAttribute | Gammel utledet handling | Tilsvarende authorizationContext |
|---|---|---|
urn:altinn:subresource:foo (forsendelse) | read | { "action": "elementread", "additionalResourceAttribute": "urn:altinn:subresource:foo", "dialogPartyChecks": [{ "accessRestriction": "None" }], "unauthorizedPresentation": "Disabled" } |
urn:altinn:task:Task_1 (forsendelse) | read | { "action": "elementread", "additionalResourceAttribute": "urn:altinn:task:Task_1", "dialogPartyChecks": [{ "accessRestriction": "None" }], "unauthorizedPresentation": "Disabled" } |
urn:altinn:resource:other (forsendelse) | read | { "serviceResource": "urn:altinn:resource:other", "dialogPartyChecks": [{ "accessRestriction": "None" }], "unauthorizedPresentation": "Disabled" } |
foo (bart, forsendelse) | read | { "action": "elementread", "additionalResourceAttribute": "urn:altinn:subresource:foo", "dialogPartyChecks": [{ "accessRestriction": "None" }], "unauthorizedPresentation": "Disabled" } |
Handling sign + attributt urn:altinn:task:Task_1 (GUI-/API-handling) | sign på det attributtet | { "action": "sign", "additionalResourceAttribute": "urn:altinn:task:Task_1", "dialogPartyChecks": [{ "accessRestriction": "None" }], "unauthorizedPresentation": "Disabled" } - fjern det øverste action-feltet |
Handling write, uten attributt (GUI-/API-handling) | write på hovedressursen | { "action": "write", "dialogPartyChecks": [{ "accessRestriction": "None" }], "unauthorizedPresentation": "Disabled" } |
action: "elementread" på rad én, to og fire er et eksempel på et selvvalgt navn, ikke et fast navn - se neste punkt.
Fem ting du bør være klar over ved migrering:
- Gamle autorisasjonsattributter utleder ikke lenger en egen handling for avgrensing til underressurs eller oppgave. De utledet tidligere
transmissionreadi det tilfellet, nettopp for at forespørselen ikke skulle treffe en bredereread-regel på hovedressursen ved et uhell; den utledningen er borte, og hvert gammelt attributt utleder nå et rentread, uansett hva det refererer til. En underressurs eller oppgave navngitt i et gammelt attributt kan derfor bare utvide tilgang gjennom en egen policyregel, aldri avgrense den - se bruke autorisasjonsattributter på forsendelser. Hvis du var avhengig avtransmissionreadfor å avgrense en forsendelses synlighet, og vil fortsette med det etter migrering, gi autorisasjonskonteksten en egen, distinktaction(elementreadi tabellen ovenfor er bare et eksempelnavn) og oppdater policyen din til å matche på den handlingen i stedet fortransmissionread-authorizationContext.actioner det eneste stedet en avgrensende handling fortsatt kan navngis. - En relatert oppførselsendring gjelder gamle entiteter uansett om du migrerer dem eller ikke. Autorisasjon for en gammel handling uten
authorizationAttributekrever nå at handlingen er tillatt på nøyaktig den ressursen entiteten refererer til. Tidligere kunne dette også oppfylles av at en annen entitet i samme dialog hadde den handlingen tillatt på en eller annen ressurs, inkludert dialogens hovedressurs - noe som blant annet betydde at enwrite-GUI-handling uten autorisasjonsattributt kunne bli tillatt bare fordi en urelatert entitet i dialogen også hadde et tillattwrite. Den trenger nåwritespesifikt på hovedressursen. Dette er en feilretting snarere enn en levende migreringsrisiko i dag, men en fremtidig policy utformet på den gamle måten ville blitt påvirket - hvis tjenesten din bruker flere ulike handlinger på tvers av entiteter i samme dialog, kan det være verdt å dobbeltsjekke policyene dine. unauthorizedPresentationhar ingen tilsvarende gammel verdi og må velges eksplisitt. Den gamle oppførselen (maskere URL-er, beholde innhold) tilsvarerDisabled. Å migrere medExcludedi stedet er en synlig endring for sluttbrukere, og en systemene deres må være forberedt på: entiteten forsvinner ut av listen den lå i.- Rettigheten flytter fra
a-claimet tile-claimet. Så snart en entitet får en autorisasjonskontekst, forsvinner rettigheten fra listen over autoriserte handlinger i dialogtokenet (a), og entiteten listes i stedet opp i tokenetse-claim ved ID ellertokenRef- en mottakende tjeneste som autoriserer utelukkende ut fraa, vil begynne å nekte forespørsler for den entiteten. Sørg for at mottakersiden sjekkere(se referansen for dialogtoken) før du migrerer. - En forskjell på trådnivå i ressursattributtet er lett å overse. For
authorizationAttributehar Dialogporten alltid sendt et underressursattributt i den underliggende autorisasjonsforespørselen - en sentinelverdi,main, når det ikke ble oppgitt noe attributt i det hele tatt. En autorisasjonskontekst som verken setterserviceResourceelleradditionalResourceAttribute(ren avgrensing til part), sender ikke noe underressursattributt i det hele tatt. En policyregel som matcher spesifikt på at underressursattributtet ermain, vil slutte å matche etter at du migrerer til en ren partsavgrenset kontekst. Policyer som ikke refererer til attributtet, påvirkes ikke.
Valideringsfeil
| Problem med forespørselen | Melding |
|---|---|
Ingen oppføringer, eller flere enn 4, i parties og dialogPartyChecks til sammen | 'Parties' and 'DialogPartyChecks' must together contain at least 1 and at most 4 entries. |
Samme part oppført to ganger i parties | Can not contain duplicate items: [...]. |
Dialogens egen part i parties | 'Parties' cannot contain the dialog's own party ('...'); use a 'DialogPartyChecks' entry with 'AccessRestriction' 'None' instead. |
accessRestriction utelatt eller ukjent | 'AccessRestriction' is required and must be one of 'None', 'DirectAndHierarchy' or 'ClientDelegation'. |
viaParty utelatt med ClientDelegation | 'ViaParty' is required when 'AccessRestriction' is 'ClientDelegation'. |
viaParty satt med en annen accessRestriction | 'ViaParty' is only allowed when 'AccessRestriction' is 'ClientDelegation'. |
viaParty er ikke en organisasjonsidentifikator | 'ViaParty' must be on format 'urn:altinn:organization:identifier-no:{norwegian org-nr}' with a valid organization number. |
viaParty er dialogens egen part | 'ViaParty' cannot be the dialog's own party ('...'). |
| To sjekker som evaluerer det samme | 'DialogPartyChecks' cannot contain duplicate checks (same access restriction, via party, effective service resource and effective action). |
En begrenset sjekk ved siden av en None-sjekk for den samme rettigheten | 'DialogPartyChecks' cannot contain a 'DirectAndHierarchy' or 'ClientDelegation' check for the same effective service resource and action as a 'None' check, which already covers it. |
additionalResourceAttribute som starter med urn:altinn:resource: | 'AdditionalResourceAttribute' cannot contain a service resource reference ('urn:altinn:resource:...'); use 'ServiceResource' instead. |
additionalResourceAttribute som refererer til en app | 'AdditionalResourceAttribute' cannot reference an app (the 'urn:altinn:app:' namespace, or a value expanding into an 'app_{org}_{appId}' identifier); 'ServiceResource' already carries the resource-registry entry for an app, and there is no equivalent per-app override for this field. |
additionalResourceAttribute som refererer til en organisasjon | 'AdditionalResourceAttribute' cannot reference an organization (the 'urn:altinn:org:' namespace); the organization owning the effective resource is derived from the resource itself. |
serviceResource som ikke starter med urn:altinn:resource: | 'ServiceResource' must start with 'urn:altinn:resource:'. |
unauthorizedPresentation utelatt | 'UnauthorizedPresentation' is required and must be either 'Disabled' or 'Excluded'. |
Øverste action-felt kombinert med authorizationContext på en GUI- eller API-handling | 'Action' cannot be combined with 'AuthorizationContext'; use 'AuthorizationContext.Action' instead. |
Øverste action-felt utelatt på en GUI- eller API-handling uten authorizationContext | 'Action' must not be empty when 'AuthorizationContext' is not supplied. |
authorizationAttribute kombinert med authorizationContext | 'AuthorizationAttribute' cannot be combined with 'AuthorizationContext'. |
serviceResource, på konteksten eller på en dialogpartssjekk, som refererer til en ressurs den som kaller ikke eier | 403 Forbidden, Not allowed to reference the following unowned resources: [...] |
additionalResourceAttribute som refererer til en app den som kaller ikke eier | 403 Forbidden, Not allowed to reference the following unowned apps: [...] |
Kontraktreferanse
Én oppføring i dialogPartyChecks:
Stubben som brukes i de seks excluded*-listene i sluttbruker-API-et:
Les mer
- Lær hvordan autorisasjonskontekster gir finkornet tilgangskontroll med flere parter på enkelte deler av en dialog
- Referanseinformasjon om dialogtoken
- Referanseinformasjon om autorisasjonsattributter