Skip to content

Latest commit

 

History

History
187 lines (138 loc) · 6.23 KB

samtykketoken_i_maskinporten.md

File metadata and controls

187 lines (138 loc) · 6.23 KB

Maskinporten som token-utsteder for samtykkeløysinga?

Det er tre prosesser knytta til Samtykkeløsningen der det kan vere aktuelt å la ID-porten / Maskinporten utføre dei "oauth2-liknande" oppgåvene som skjer i Altinn idag:

  1. Sluttbruker inngår samtykke
  2. Datakonsument henter token
  3. Datakilde validerer token og utleverer data

Me ser først på nr 2 og 3 nedanfor

Prosess 2+3: Samtykke-token frå Maskinporten

  • Maskinporten blir utsteder av samtykketokens

    • Det nye samtykketokenet innheld då både virksomhetsautentisering, kontroll av databehandler-delegering og det detaljerte samtykket fra innbygger
    • Det nye samtykketokenet er modifisert til å vere meir "oauthsk"
      • AuthorizationCode endres til consent_id
      • Omstrukturert ihht. RAR med authorization_details-claimet, dvs. endrar frå flate claims til ein array av samtykker per tjenestekode og varigheit.
      • Endrar frå CamelCase til snake_case
  • Sjølve samtykket persisteres og vert framleis forvalta i Altinn Autorisasjon

    • GUI, inngåelse, tilbaketrekking, etc.
sequenceDiagram;
  Datakonsument->>Maskinporten: forspør token med consent_id
  note over Maskinporten: virksomhetsautentisering + scope-validering
  opt: dersom databehandler
    Maskinporten->>Altinn: /delegations(consumer_org, supplier_org, scope)
  end
  Maskinporten->>Altinn: oppslag på consent_id
  note over Altinn: validerer at consent_id er gyldig og tilhører Datakonsument
  Altinn->>Maskinporten: samtykke-detaljer
  Maskinporten->>Datakonsument: returner samtykketoken
  Datakonsument->>API: henter data med samtykketoken
Loading

Request:

Her bruker vi Maskinporten med grunnleggande JWT-grants på vanleg måte, men innfører RAR, dvs. authorization_details som nytt claim i request, og der kvar auth_type trigger custom logikk.

Følgjande scope er naudsynt for å få ut samtykketokens (dvs. gjenbruk av dagens scope)

claim skildring
scope Må vere altinn:consenttokens

I tilegg trengs det innførast samtykke-spesifikke element i førespurnaden.

claim skildring
consent_id Ein unik identifikator på sjølve samtykket. (Dette vart tidlegare kalla AuthorizationCode, men endrar namn for å unngå forvirring med standard oauth-claim)

Bruk av databehandler

Bruk av databehandler er basert på den vanlege delegering i eOppslag-funksjonaliteten i Maskinporten for kunde-leverandørforhold.

Dvs. databehandlar som skal hente samtykke-tokens på vegne av data-konsument (behandlingsansvarlig), må autentisere seg med eige virksomheitssertifikat/nøkkel mot Maskinporten og be om på-vegne-av-token. registerere ein maskinporten-klient om brukar eige virksomhetssertifikat/nøkkel klienten som henter token vere registrert på leverandør (databehandler) og bruke eige virksert/nøkkelgrantet i tillegg innehalde:

claim skildring
consumer_org Organisasjonsnummer på datakonsument, valgfri, trigger vanleg kontroll av delegering for aktuelt scope

(ER DET SLIK AT SAMTYKKET ER GJEVE TIL DATABEHANLDAR? SO VISS BANKEN BYTTAR DATABHENDALAR MÅ INNBYGGAR GJE SAMTYKKE PÅ NYTT?)

Feilkoder

Feilmeldinger:

feilkode skildring
400 bad request
400 bad request - "noe feil mot altinn" (truleg feil i Maskinporten og ikkje hjå konsument)
404 consent_id not found
404 det finst ikkje noko samtykke for kombinasjonen av coveredby og offeredby og servicecode
403 forbidden: konsument / leverandør har ikkje lov til å hente samtykketoken
40x leverandør har ikkje lov til å opptre på vegne av konsument (for scope, dvs. hente samtykketokens)

Døme:

POST /token HTTP/1.1
Host: maskinporten.no
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&assertion=eyJhbG....

der grantet (assertion) sin body ser slik ut:

"aud":"https://maskinporten.no",
"iss": "some_client_id",
"iat": ..
"exp": ..
"jti": ..
"scope": "altinn:consenttokens",
"consumer_org": 999888777         //valgfritt

"authorization_details": [
  { "type": "urn:altinn:samtykke",
    "consent_id": "c7dbe642-0fc1-4c3b-8959-8a92e3e1f17d"
  }
]

Respons

Responsen er er eit samtykke-token frå Maskinporten, der det er utført både virksomhetsautentisering, kontroll av evt. delegering til leverandør, og berikelse med samtykke-informasjon fra Altinn Autorisasjon.

Samtykke-informasjonen er modifisert frå dagens samtykketoken, for å vere ihht RAR-strukturen:

// standard oauth claims:
"iss": "https://maskinporten.no",
"iat": 1503860317,
"exp": 1503860347,
"jti": "a9daa57c-0b68-4ba2-a953-7567a99bd0f0",
"scope": "altinn:consentokens",

// Informasjon om klienten som ba om tokenet, standard Maskinporten-claims:
"client_id": "asdkjflkdsajfsadlf",
"client_amr": "private_key_jwt",
"token_type": "Bearer",
"consumer" : {
   "authority" : "iso6523-actorid-upis",
   "ID" : "0192:910514458"      // alltid lik covered_by
 }
 "supplier" : {
    "authority" : "iso6523-actorid-upis",
    "ID" : "0192:991825827"
  },
"delegation_source": "https://altinn.no",

// Informasjon om sjølve samtykket:
"authorization_details": [
    {
      "type":"urn:altinn:samtykke",
      "service_code": 4629,
      "service_edition": 2,
      "year": 2016,

      "consent_id": "c7dbe642-0fc1-4c3b-8959-8a92e3e1f17d",
      "offered_by": "11025802170",
      "covered_by": "910514458",
      "delegated_date": 1503855661,
      "valid_to_date": 1506760200,
    },
    {
      "type":"urn:altinn:samtykke",
      "service_code": 4630,
      "service_edition": 2,
      "from": "2017-06",
      "to": "2017-08",

      "consent_id": "c7dbe642-0fc1-4c3b-8959-8a92e3e1f17d",
      "offered_by": "11025802170",
      "covered_by": "910514458",
      "delegated_date": 1503855661,
      "valid_to_date": 1506760200,
    }

]

Dersom samtykket ikkje er inngått eller trukket tilbake kan responsen bli slik:

"authorization_details": [
    {
      "type":"urn:altinn:samtykke",
      "consent_id": "c7dbe642-0fc1-4c3b-8959-8a92e3e1f17d",
      "status": "OPEN"
    }
]