Sist endret: 24. aug. 2026

Komponentarkitektur - Tilgangsstyring

Tilgangsstyringskomponenten i Altinn-plattformen er en ASP.NET Core 6 web-API-applikasjon med et React-grensesnitt som driftes som en Docker-kontainer i Altinn-plattformens Kubernetes-klynge.

Se løsningssiden for en funksjonell beskrivelse av komponenten.

Access Management
Konstruksjonskomponenter Altinn Resource Registry

Frontend

Frontend er utviklet som en frittstående React-applikasjon.

Den benytter følgende rammeverk:

  • Axios
  • Redux
  • Redux Toolkit
  • Redux Query

Build & Deploy

Vi bruker GitHub Actions og Azure DevOps til å bygge frontend-applikasjonene.
Kildekoden ligger i repoet altinn-access-mangement-frontend.

Hosting

Backend-en hoster den bygde frontend-applikasjonen.
Filene ligger i mappen wwwroot i backend-prosjektet.

Backend

Følgende API-kontrollere inngår i komponenten:

Database

Data om delegasjoner lagres i PostgreSQL og Azure Blob Storage.

  • DelegationChange – inneholder delegasjonsinformasjon for app-delegeringer
  • ResourceDelegationChange – lagrer endringer for delegasjoner knyttet til ressurser
  • AuthorizationResources – uttrekk fra ressursregisteret med de viktigste ressursopplysningene

Database
Access Management-database

API

Følgende API-er er identifisert.

Rights

Rights-API-et viser rettigheter mellom to parter (organisasjoner, brukere eller personer).

Rettighetene bygger på regler som tjenesteeieren har definert, eller på rettigheter som en part har delegert videre.

Eksempler på konsumenter av API-et:

  • Sluttbruker som vil se hvilke rettigheter vedkommende har på vegne av en part
  • Administrator for parten
  • Ressurseier som trenger oversikt over hvilke rettigheter part A har overfor part B

Outbound Rights

Outbound-API-et er rettet mot administratorer hos parten som gir rettighetene.

/accessmanagement/api/v1/{who}/rights/outbound/?resource={resource}&recevingParty={receivingparty}

Eksempel

/accessmanagement/api/v1/234234/rights/outbound/?resource=app:skd_flyttemelding&recevingParty=556677

Inbound Rights

/accessmanagement/api/v1/{who}/rights/inbound/?resource={resource}&recevingParty={receivingparty}

Eksempel

/accessmanagement/api/v1/234234/rights/inbound/?resource=app_skd_flyttemelding&recevingParty=556677

Respons

Responsen inneholder alle rettigheter for relevante relasjoner:

  • Rettigheter fra policy definert av tjenesteeier (f.eks. ER-roller eller Altinn-roller)
  • Rettigheter fra delegerte policyer
[
    {
        "PolicyId": "app:skd_flyttemelding",
         "PolicyVersion": "??",
        "RuleId" : "1",
        "OfferedByPartyId": "234234",
        "CoveredBy"[
            {
                "id": "urn:altinn:party",
                "value": "556677"
            }
        ],
        "Subject"[
            {
                "id": "urn:altinn:role",
                "value": "dagl"
            }
        ],
        "Resource"[
            {
                "id": "urn:altinn:org",
                "value": "skd"
            },
            {
                "id": "urn:altinn:app",
                "value": "flyttemelding"
            }
        ],
        "Action":
            {
                "id": "urn:altinn:action",
                "value": "read"
            }
        ,
        "RightSourceType":"Role",
        "HasPermit": true
    },
    {
        "PolicyId": "app:skd_flyttemelding",
         "PolicyVersion": "??",
        "RuleId" : "2",
        "OfferedByPartyId": "234234",
        "CoveredBy"[
            {
                "id": "urn:altinn:party",
                "value": "556677"
            }
        ],
        "Subject"[
            {
                "id": "urn:altinn:role",
                "value": "dagl"
            }
        ],
        "Resource"[
            {
                "id": "urn:altinn:org",
                "value": "skd"
            },
            {
                "id": "urn:altinn:app",
                "value": "flyttemelding"
            }
        ],
        "Action":
            {
                "id": "urn:altinn:action",
                "value": "write"
            }
        ,
        "RightSourceType":"Role",
        "HasPermit": true
    },
    {
        "PolicyId": "/skd_flyttemedling/234234/234234234",
        "PolicyVersion": "2010-12-10 10:35:123",
        "RuleId" : "1",
        "OfferedByPartyId": "234234",
        "CoveredBy"[
            {
                "id": "urn:altinn:party",
                "value": "556677"
            }
        ],
        "Subject"[
            {
                "id": "urn:altinn:user",
                "value": "234234"
            }
        ],
        "Resource"[
            {
                "id": "urn:altinn:org",
                "value": "skd"
            },
            {
                "id": "urn:altinn:app",
                "value": "flyttemelding"
            }
        ],
        "Action":
            {
                "id": "urn:altinn:action",
                "value": "sign"
            }
        ,
        "RightSourceType":"AppDelegation",
        "HasPermit": true
    }
]

Rights delegations

Liste

Delegations-API-et viser at det finnes rettigheter mellom to parter for en spesifikk ressurs eller ressurstype.

I første iterasjon eksponerer vi et eget endepunkt for Maskinporten-skjemaer for å utsette behovet for et generisk endepunkt.

Endepunkt for sluttbrukere i portalen:

/accessmanagement/api/v1/{who}/delegations/maskinportenscheme/outbound/
/accessmanagement/api/v1/admin/delegations/maskinportenscheme/outbound/?supplierORg=234234&consumerOrg&scope=www.navn.no

Responsen er en liste over delegasjoner med mottaker, toppressurs og tidsinformasjon.

[
  {
    "ResourceId": "resource:innteksapi",
    "ResourceTitle": "2022-01-22",
    "Delegation": [
      {
        "CoveredByName": "EVRY",
        "OfferedByName": "NAV",
        "OfferedByPartyId": 123134234,
        "CoveredByPartyId": 234234,
        "PerformedByUserId": 123123,
        "Created": "2020-01-01",
        "OfferedByOrganizationNumber": null,
        "CoveredByOrganizationNumber": null
      },
      {
        "CoveredByName": "KPMG",
        "OfferedByName": "NAV",
        "OfferedByPartyId": 123134234,
        "CoveredByPartyId": 234234,
        "PerformedByUserId": 123123,
        "Created": "2020-01-01",
        "OfferedByOrganizationNumber": null,
        "CoveredByOrganizationNumber": null
      }
    ]
  }
]

POST

Oppretter nye rettigheter ved å legge til nye regler.

Rights delegation

Gir detaljer om en spesifikk delegasjon.

/accessmanagement/api/v1/admin/delegations/rules/?offeredByPartyId=2324
[
    {
        "PolicyId": "d9da781a-b8d0-46f6-ba33-882a2e47c0c6",
        "RuleId" : "asdfasdfsdaf",
        "OfferedByPartyId": "234234",
        "CoveredBy"[
            {
                "id": "urn:altinn:party",
                "value": "556677"
            }
        ],
        "Subject"[
            {
                "id": "urn:altinn:userid",
                "value": "123123"
            }
        ],
        "Resource"[
            {
                "id": "urn:altinn:org",
                "value": "skd"
            },
            {
                "id": "urn:altinn:app",
                "value": "flyttemelding"
            }
        ],
        "Action":
            {
                "id": "urn:altinn:action",
                "value": "read"
            }
        ,
        "RightSourceType":"Role",
        "HasPermit": true
    },
    {
        "PolicyId": "app:skd_flyttemelding",
        "RuleId" : "asdfasdfsdaf",
        "OfferedByPartyId": "234234",
        "CoveredBy"[
            {
                "id": "urn:altinn:party",
                "value": "556677"
            }
        ],
        "Subject"[
            {
                "id": "urn:altinn:role",
                "value": "dagl"
            }
        ],
        "Resource"[
            {
                "id": "urn:altinn:org",
                "value": "skd"
            },
            {
                "id": "urn:altinn:app",
                "value": "flyttemelding"
            }
        ],
        "Action":
            {
                "id": "urn:altinn:action",
                "value": "write"
            }
        ,
        "RightSourceType":"Role",
        "HasPermit": true
    }
]
Delegations
Access Groups
/accessmanagement/api/v1/accessgroups
/accessmanagement/api/v1/accessgroups/offeredBy/{partyId}/coveredBy/{partyId}

GET – Liste over grupper

/accessmanagement/api/v1/accessgroups/{group}/resorucerights/
/accessmanagement/api/v1/accessgroups/{group}/resorucerights/{resourceid}/

GET

[
    {
        "PolicyId": "d9da781a-b8d0-46f6-ba33-882a2e47c0c6",
        "RuleId" : "asdfasdfsdaf",
        "OfferedByPartyId": "234234",
        "CoveredBy"[
            {
                "id": "urn:altinn:party",
                "value": "556677"
            }
        ],
        "Subject"[
            {
                "id": "urn:altinn:userid",
                "value": "123123"
            }
        ],
        "Resource"[
            {
                "id": "urn:altinn:org",
                "value": "skd"
            },
            {
                "id": "urn:altinn:app",
                "value": "flyttemelding"
            }
        ],
        "Action":
            {
                "id": "urn:altinn:action",
                "value": "read"
            }
        ,
        "RightSourceType":"Role",
        "HasPermit": true
    },
    {
        "PolicyId": "app:skd_flyttemelding",
        "RuleId" : "asdfasdfsdaf",
        "OfferedByPartyId": "234234",
        "CoveredBy"[
            {
                "id": "urn:altinn:party",
                "value": "556677"
            }
        ],
        "Subject"[
            {
                "id": "urn:altinn:role",
                "value": "dagl"
            }
        ],
        "Resource"[
            {
                "id": "urn:altinn:org",
                "value": "skd"
            },
            {
                "id": "urn:altinn:app",
                "value": "flyttemelding"
            }
        ],
        "Action":
            {
                "id": "urn:altinn:action",
                "value": "write"
            }
        ,
        "RightSourceType":"Role",
        "HasPermit": true
    }
]

Sikkerhet

Autentisering

API-ene er beskyttet og krever at bruker eller virksomhet er autentisert.

Token leveres via informasjonskapsel for brukere av React-grensesnittet, eller som Bearer-token i headeren.

Altinn Access Management benytter JWTCookie-autentisering som støtter validering av både JWT-cookie og JWT-bearer-token.

Avklaring: Støtter vi Maskinporten-token direkte?

CSRF-beskyttelse

API-endepunktene er sikret mot CSRF.

API Management-abonnement

Noe funksjonalitet krever et spesifikt abonnement i API Management.
Eksterne konsumenter må følge SLA og ha en avtale for bruk av API-et.

Autorisasjon

Tilgangen til API-ene krever autorisasjon på ulike nivåer.

Noen API-er krever generell tilgang til en ressurs. Dette håndteres av standard Policy Enforcement Point eller en tilpasset variant.

I tillegg har API-ene ofte intern logikk som filtrerer data basert på forretningsregler. Dette er egne implementasjoner.

Database-repositorium

Access Management eier de delegerte rettighetene.

  • PostgreSQL lagrer informasjon om delegerte policyer
  • Azure Blob Storage benyttes i tillegg

Se migreringsskript for tabellstruktur og lagrede prosedyrer.

Build & Deploy