Sist endret: 6. mai 2025

Ta i bruk systembruker for API-leverandører

Systembruker er et nytt konsept for API-autentisering. Denne guiden beskriver hvordan API-leverandører kan beskytte sine API-er med dette konseptet.

Bakgrunn

Bakgrunnen til systembruker konsept kan leses om her.

Forutsetninger

For å kunne bruke systembruker som API-leverandør må følgende forutsetninger være oppfylt:

  • Avtale med Maskinporten som API-leverandør
  • Avtale med Digdir for tilgang til ressursregisteret for opprettelse av ressurser
  • Opprettelse av nødvendige ressurser som skal autoriseres
  • Tildelt scope for PDP-integrasjon
  • Integrasjon med Altinn PDP
Systembruker er kun egnet for tilfeller der det ikke er behov for at Altinn kan koble operasjonene som utføres med hvilken person som utfører dem. Som tjenesteier må du gjøre en vurdering om det er behov for å knytte person til utført handling. Dersom dette er behov må tjensten benytte ID-porten.

Validering av Maskinporten token

Selve tokenet valideres som et standardisert Maskinporten token. Les mer hos Maskinporten.

Et systembrukertoken inneholder en del flere detaljer enn et vanlig Maskinporten token.

Nedenfor vises et eksempeltoken.

JWT Token

{
  "authorization_details" : [ {
    "type" : "urn:altinn:systemuser",
    "systemuser_org" : {
      "authority" : "iso6523-actorid-upis",
      "id" : "0192:314168267"
    },
    "systemuser_id" : [ "ebe4a681-0a8c-429e-a36f-8f9ca942b59f" ],
    "system_id" : "matrix_test"
  } ],
  "scope" : "krr:global/kontaktinformasjon.read",
  "iss" : "https://test.maskinporten.no/",
  "client_amr" : "private_key_jwt",
  "token_type" : "Bearer",
  "exp" : 1718175135,
  "iat" : 1718175015,
  "client_id" : "fc9a8287-e7cb-45e5-b90e-123048d32d85",
  "jti" : "-SpfU--1Zn_Oqvkpjwu3oVn--VLcPzSAwjqyiP6zBEw",
  "consumer" : {
    "authority" : "iso6523-actorid-upis",
    "ID" : "0192:314330897"
  }
}

Verdiene som er viktige for API leverandør er.

VerdiBetydning
authorization_details:systemuser_idUnik id for systembrukeren. Det er denne verdien som Altinn trenger for å kunne autorisere tilgang. Det er denne som har fått delegert tilganger.
authorization_details:systemuser_org:idOrganisasjonen som har opprettet systembrukeren
authorization_details:system_idReferanse til systemet som systembrukeren peker på
Consumer:idOrganisasjonsnr til systemleverandør (organisasjon som har autentisert seg mot Maskinporten)

Se også dokumentasjon hos Maskinporten.

Autorisasjon av systembruker

API-leverandøren må kalle Altinn PDP for å autorisere tilgangen til systembrukeren. Dette gjøres ved å sende et kall til Altinn PDP.

API-leverandøren må konfigurere hvilke handlinger og ressurser som aksesseres via API-et for å bygge opp den totale forespørselen.

Nedenfor vises et eksempel på et kall utført av systembruker a545ca29-7fb8-4810-a2f2-0be171cb2a26 som prøver å gjøre en read-operasjon på en ressurs av typen kravogbetaling for organisasjonen 923609016.

{
   "Request": {
     "ReturnPolicyIdList": true,
     "AccessSubject": [
       {
         "Attribute": [
           {
             "AttributeId": "urn:altinn:systemuser:uuid",
             "Value": "a545ca29-7fb8-4810-a2f2-0be171cb2a26"
           }
         ]
       }
     ],
     "Action": [
       {
         "Attribute": [
           {
             "AttributeId": "urn:oasis:names:tc:xacml:1.0:action:action-id",
             "Value": "read",
             "DataType": "http://www.w3.org/2001/XMLSchema#string"
           }
         ]
       }
     ],
     "Resource": [
       {
         "Attribute": [
           {
             "AttributeId": "urn:altinn:resource",
             "Value": "kravogbetaling"
           },
           {
             "AttributeId": "urn:altinn:organization:identifier-no",
             "Value": "923609016"
           }
         ]
       }
     ]
   }
}

Altinn PDP returnerer svaret som en XACML Json respons hvor det informeres om request autorisert eller ikke.

API tilbyder må i sitt API ha logikk for å kunne avvise eller godta forespørsel fra system basert på dette.

{
  "Response": [
    {
      "Decision": "Permit",
      "Status": {
        "StatusCode": {
          "Value": "urn:oasis:names:tc:xacml:1.0:status:ok"
        }
      },
      "Obligations": [
        {
          "id": "urn:altinn:obligation:authenticationLevel1",
          "attributeAssignment": [

            {
              "attributeId": "urn:altinn:obligation-assignment:1",
              "value": "2",
              "category": "urn:altinn:minimum-authenticationlevel",
              "dataType": "http://www.w3.org/2001/XMLSchema#integer",
              "issuer": null
            }
          ]
        }
      ]
    }
  ]
}

Se flere eksempler på bruk av Altinn PDP her.