Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions _docs/Maskinporten/maskinporten_checklist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
---
title: Sjekkliste for Maskinporten Integrasjon
description: Krav og anbefalinger for integrasjon mot Maskinporten

sidebar: maskinporten_sidebar
product: Maskinporten
---

# Sjekkliste for Maskinporten Integrasjon

Kortfattet sjekkliste for integrasjon mot Maskinporten. For detaljer, se [guide for API-tilbydere](maskinporten_guide_apitilbyder) og [guide for API-konsumenter](maskinporten_guide_apikonsument).

> 🔒 = sikkerheitsrelatert punkt. **Krav** = må oppfyllast. **Anbefalt** = bør oppfyllast.

## For API-tilbyder

- [ ] Akseptere Digdir sine [bruksvilkår](https://samarbeid.digdir.no) for fellesløsninger
- [ ] [Få tildelt API-prefiks](maskinporten_guide_apitilbyder#1-manuell-tildeling-av-prefix)
- [ ] [Opprette scopes](maskinporten_guide_apitilbyder#beskrivelse-av-apier) med riktig syntaks, synlighet og begrensninger
- [ ] [Gi tilgang til konsumenter](maskinporten_guide_apitilbyder#1b-tilgangsstyring---via-samarbeidsportalen) basert på organisasjonsnummer
- [ ] 🔒 [Validere token](maskinporten_guide_apitilbyder#4-validere-token): issuer, signatur, scope, utløpstid
- [ ] 🔒 Bruke `consumer`-claimet for tilgangskontroll — **ikke** `client_id` eller `client_org`
- [ ] 🔒 Ved delegering: [Logg `supplier` og `delegation_source` claims](maskinporten_guide_apitilbyder#4-validere-token)

### Delegering via Altinn (valgfritt)

- [ ] [Opprette delegeringsoppsett](maskinporten_guide_apitilbyder#bruke-delegering-i-altinn) (krever at du er tjenesteeier i Altinn)
- [ ] Forstå at scopes med/uten delegeringskilde har [ulike begrensninger](maskinporten_func_delegering)

## For API-konsument

- [ ] Få tilgang til ønsket scope fra API-tilbyder
- [ ] [Opprette integrasjon](maskinporten_guide_apikonsument#4-opprett-en-integrasjon-i-maskinporten) med riktige egenskaper
- [ ] 🔒 [Generere og signere JWT-grant](maskinporten_guide_apikonsument#5-be-om-token) med påkrevde claims
- [ ] 🔒 Sikre at hver JWT er unik (bruk `jti`)
- [ ] [Sende API-kall](maskinporten_guide_apikonsument#6-sende-api-kall-med-token) med `Authorization: Bearer <access_token>`
- [ ] Håndtere token-utløp (hent nytt ved 401, gjenbruk innen levetiden)

### Anbefalinger

- [ ] 🔒 Bruk separate klienter for ulike APIer — reduserer skadeomfang ved kompromittering
- [ ] 🔒 Foretrekk [egen asymmetrisk nøkkel](maskinporten_guide_apikonsument#registrere-klient-som-bruker-egen-nøkkel) fremfor virksomhetssertifikat — unngå å spre sertifikatet
- [ ] 🔒 Be om ett scope per token — begrens tilgangen i kvart token

### Delegering via Altinn (for leverandører)

- [ ] [Registrer integrasjon](maskinporten_guide_apikonsument#bruke-delegering-som-leverandør) som tilhørende deg selv — **ikke** "på vegne av kunde"
- [ ] Inkluder `consumer_org` i JWT-grant
- [ ] Sørg for at [konsumenten delegerer tilgang](maskinporten_guide_apikonsument#bruke-delegering-som-konsument) i Altinn

## Generelle krav

### Sikkerhet og nøkkelhåndtering

- [ ] 🔒 **Krav:** Etabler sikker nøkkelhåndtering — beskytt private nøklar, definer prosedyrar for oppbevaring, backup, tilgangsstyring, fornyelse og kompromitteringshåndtering
- [ ] 🔒 **Krav:** Gjennomfør risikovurdering av eigen løysing — avgjer kva API-ar ein klient skal ha tilgang til
- [ ] 🔒 **Krav:** Åpne utgåande brannmur for Maskinporten sine IP-adresser (om aktuelt)

### Logging og testing

- [ ] 🔒 **Krav:** Logg token-forespørslar, API-kall, feil og sikkerheitshendingar
- [ ] API-tilbydere: Logg consumer-informasjon for sporbarhet
- [ ] Test i riktig testmiljø før produksjon

## Ressurser

- [Maskinporten overordnet](maskinporten_overordnet)
- [Guide for API-tilbydere](maskinporten_guide_apitilbyder)
- [Guide for API-konsumenter](maskinporten_guide_apikonsument)
- [JWT-grant spesifikasjon](maskinporten_protocol_jwtgrant)
- [Ekstern delegering](maskinporten_func_delegering)
- [Selvbetjenings-API](../../idporten/oidc/oidc_api_admin_maskinporten)
- [Samarbeidsportalen](https://samarbeid.digdir.no)
43 changes: 43 additions & 0 deletions _docs/Maskinporten/maskinporten_samtykke_checklist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
title: Sjekkliste for Samtykketoken i Maskinporten
description: Krav og anbefalinger for bruk av samtykketoken

sidebar: maskinporten_sidebar
product: Maskinporten
---

# Sjekkliste for Samtykketoken i Maskinporten

Kortfattet sjekkliste for bruk av samtykketoken. For detaljer, se [Samtykketoken i Maskinporten](maskinporten_func_samtykke).

> 🔒 = sikkerheitsrelatert punkt. **Krav** = må oppfyllast. **Anbefalt** = bør oppfyllast.

## For API-tilbyder/Tjenesteeier

- [ ] [Opprette samtykkeressurs](https://docs.altinn.studio/nb/authorization/guides/resource-owner/consent/) i Altinn 3 og oppbevare uuid
- [ ] Sikre at sluttbruker aksepterer samtykket før bruk
- [ ] 🔒 **Krav:** Validere `id`, `from`, `to` og `scope` i samtykke-tokenet — sikrar at tokenet gjeld rett samtykke, rett person/org og rett API
- [ ] 🔒 **Krav:** Oppfylle [datatilsynets krav til samtykke](https://www.datatilsynet.no/rettigheter-og-plikter/virksomhetenes-plikter/behandlingsgrunnlag/veileder-om-behandlingsgrunnlag/?id=176)

## For Datakonsument/Tjenesteleverandør

- [ ] Opprette Maskinporten-integrasjon via [Samarbeidsportalen](https://samarbeid.digdir.no)
- [ ] Ha tilgang til API-tilbyders scope (direkte eller via [delegering](maskinporten_func_delegering))
- [ ] Bruke [RAR-forespørsel](maskinporten_func_samtykke#grensesnittsdefinisjon) av type `urn:altinn:consent` med påkrevde claims (`type`, `id`, `from`)
- [ ] Kun forespørre ett samtykke per token-request
- [ ] Alltid inkludere ett eller flere OAuth2 scopes i JWT-grantet
- [ ] 🔒 **Krav:** Sikre at `consumer` matcher `to`-claim i responsen — forhindrar uautorisert tilgang
- [ ] 🔒 **Krav:** Ved delegerte scopes: samtykket må vere gitt til den som har delegert scopet

## Generelt

- [ ] Forstå [samtykke-tokenets innhold](maskinporten_func_samtykke#respons): `id`, `from`, `to`, `consented`, `validTo`, `consentRights`
- [ ] 🔒 Sjekk `validTo` — bruk ikkje samtykke som er utløpt

## Ressurser

- [Samtykketoken i Maskinporten](maskinporten_func_samtykke)
- [Altinn: Samtykke for tjenesteeier](https://docs.altinn.studio/nb/authorization/guides/resource-owner/consent/)
- [Altinn: Kom igang med samtykke](https://docs.altinn.studio/nb/authorization/getting-started/consent/)
- [RFC 9396: Rich Authorization Requests (RAR)](https://datatracker.ietf.org/doc/rfc9396/)
- [Maskinporten: Delegering](maskinporten_func_delegering)
86 changes: 86 additions & 0 deletions _docs/ansattporten/ansattporten_checklist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
title: Sjekkliste for Ansattporten Integrasjon
description: Krav og anbefalinger for integrasjon mot Ansattporten

sidebar: ansattporten
product: Ansattporten
---

# Sjekkliste for Ansattporten Integrasjon

Kortfattet sjekkliste for integrasjon mot Ansattporten. For detaljer, se [Hva er Ansattporten?](ansattporten_om) og [integrasjonsguiden](ansattporten_guide).

> 🔒 = sikkerheitsrelatert punkt. **Krav** = må oppfyllast. **Anbefalt** = bør oppfyllast.

## Før oppstart

- [ ] Akseptere Digdir sine [bruksvilkår](https://samarbeid.digdir.no) for fellesløsninger
- [ ] [Registrere integrasjon](ansattporten_om#hvordan-administrerer-jeg-ansattporten-) med `integration_type` satt til **`ansattporten`** (ikke `idporten`)
- [ ] Velge [bruksscenario](ansattporten_om#hvilken-bruk-scenario-støttes-): vanlig innlogging, på vegne av virksomhet, eller datadeling

## Autentisering og token

- [ ] 🔒 **Krav:** Bruke [PKCE](../../idporten/oidc/oidc_func_pkce) med `code_challenge_method=S256` — beskyttar mot autorisasjonskode-avlytting
- [ ] Inkludere påkrevde parametere: `client_id`, `redirect_uri`, `scope` (min. `openid`), `response_type=code`
- [ ] 🔒 **Krav:** Bruke `state` og `nonce` for CSRF- og replay-beskyttelse
- [ ] 🔒 **Krav:** Validere at `iss` i ID-token stemmer med **Ansattporten** (ikke ID-porten) — feil issuer kan bety at tokenet ikkje er til deg
- [ ] 🔒 **Anbefalt:** Bruke [well-known endepunkt](ansattporten_wellknown) for dynamisk konfigurasjon og JWK-henting — sikrar kontinuerleg drift ved sertifikatbytte

## Representasjon og organisasjonsvelger (valgfritt)

Ansattporten støttar to [autorative kjelder](ansattporten_om#autorative-kilder-for-representasjon) for representasjon. Vel den som passar ditt bruksscenario:

### Via Altinn Autorisasjon (RAR-type `ansattporten:altinn:resource`)

- [ ] Krever at du er [tjenesteeier i Altinn](ansattporten_om#hvem-kan-bruke-ansattporten-)
- [ ] Brukar personleg eID (BankID o.l.) — gjev sikkerheitsnivå `substantial` eller `high`
- [ ] Tilgang styrast per Altinn-ressurs med handlingar (`read`, `write` osv.) via roller, tilgangspakkar eller direkte delegering
- [ ] Oppgje `resource` (Altinn-ressurs URN) i RAR-forespørselen

### Via Virksomhetsbroen (RAR-type `ansattporten:orgno`)

- [ ] Brukar jobbkonto (Microsoft Entra ID) — gjev sikkerheitsnivå `entraid` (lågare tryggleik enn personleg eID)
- [ ] Arbeidsgjevar styrer tilgang via filterreglar basert på e-postadresse, domene eller Entra ID-gruppe
- [ ] Krev at nokon med Altinn-rolla "Administrere organisasjonstilknytning i Ansattporten" set opp reglane
- [ ] 🔒 **Merk:** Lågare sikkerheitsnivå enn Altinn — eignar seg når høg identitetstryggleik ikkje er påkrevd
- [ ] **Merk:** Framleis i pilot — kontakt Digdir for status

### Felles for begge

- [ ] Følg [guide for representasjon](ansattporten_representasjon) — bruker RAR (`authorization_details`)
- [ ] 🔒 Forstå at Ansattporten kun formidlar representasjon — **den utfører ikkje tilgangskontroll** for tenesta di. Tenesta må sjølv avgjere om brukaren har tilgang

## Sesjonshåndtering

- [ ] Forstå at det **ikke er SSO** mellom tjenester i Ansattporten — [isolert sesjon](ansattporten_om#ingen-sso-funksjonalitet-mellom-tjenester) er tvangssatt
- [ ] Implementere utlogging via /endsession-endepunktet
- [ ] Sette lokal sesjon til maks 30 minutter inaktivitet (maks 120 min total)

## Sikkerhet og nøkkelhåndtering

- [ ] 🔒 **Krav:** Etabler sikker nøkkelhåndtering — beskytt private nøklar (client_secret, asymmetriske nøklar, virksomheitssertifikat). Definer prosedyrar for oppbevaring, backup, tilgangsstyring, fornyelse og kompromitteringshåndtering
- [ ] 🔒 **Krav:** Gjennomfør risikovurdering av eigen løysing
- [ ] 🔒 **Krav:** Åpne utgåande brannmur for [Ansattporten sine IP-adresser](../../general/IP) (om aktuelt)
- [ ] 🔒 **Anbefalt:** Bruk HSM for nøkkeloppbevaring og automatisert nøkkelrotasjon

## Logging og testing

- [ ] 🔒 **Krav:** Logg autentiseringsforsøk: tidspunkt, handling, resultat, IP-adresse, `sid`, valgt organisasjon
- [ ] 🔒 **Krav:** Vurder personvern i logging
- [ ] Test i riktig miljø — well-known: [test](https://test.ansattporten.no/.well-known/openid-configuration) / [prod](https://ansattporten.no/.well-known/openid-configuration)

## Kostnader

- [ ] Kjenn til at Ansattporten deler [200.000-innloggingskvoten](ansattporten_om#hva-koster-ansattporten-) med ID-porten

## Ved problemer

Kontakt servicedesk@digdir.no — oppgi client_id, miljø og beskrivelse.

## Ressurser

- [Hva er Ansattporten?](ansattporten_om)
- [Integrasjonsguide (vanlig innlogging)](ansattporten_guide)
- [Representasjon i Ansattporten](ansattporten_representasjon)
- [Well-known endepunkt](ansattporten_wellknown)
- [Samarbeidsportalen](https://samarbeid.digdir.no/ansattporten/ansattporten-er-no-i-produksjon-som-ei-fullverdig-fellesloysing/2969)
103 changes: 103 additions & 0 deletions _docs/idporten/idporten_checklist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
---
title: Sjekkliste for ID-porten Integrasjon
description: Krav og anbefalinger for integrasjon mot ID-porten

sidebar: oidc
product: ID-porten
---

# Sjekkliste for ID-porten Integrasjon

Kortfattet sjekkliste for integrasjon mot ID-porten. For detaljer, se [integrasjonsguiden](oidc_guide_idporten) og [overordnet arkitekturbeskrivelse](idporten_overordnet).

> 🔒 = sikkerheitsrelatert punkt. **Krav** = må oppfyllast. **Anbefalt** = bør oppfyllast.

## Før oppstart

- [ ] Akseptere [bruksvilkår for ID-porten](https://samarbeid.digdir.no/id-porten/ta-i-bruk-id-porten/94)
- [ ] [Registrere integrasjon](oidc_func_clientreg) i selvbetjening på Samarbeidsportalen
- [ ] [Sende inn logo](idporten_logo) (png/jpg/gif, maks 90x135px, bakgrunn #f3f4f4 eller transparent)

## Autentiseringsforespørsel

- [ ] 🔒 **Krav:** Bruke [PKCE](oidc_func_pkce) med `code_challenge_method=S256` — beskyttar mot autorisasjonskode-avlytting
- [ ] Inkludere påkrevde parametere: `client_id`, `redirect_uri`, `scope` (min. `openid`), `response_type=code`
- [ ] 🔒 **Krav:** Velge riktig [sikkerhetsnivå](oidc_protocol_authorize) (`idporten-loa-substantial` eller `idporten-loa-high`) basert på risikovurdering
- [ ] 🔒 **Krav:** Bruke `state` (CSRF-beskyttelse) og `nonce` (replay-beskyttelse)
- [ ] 🔒 **Anbefalt:** Vurdere [PAR](oidc_protocol_par) for tjenester med høge sikkerheitskrav — beskyttar parametere mot manipulasjon i nettlesar

## Token-håndtering

- [ ] 🔒 **Krav:** Implementere [klientautentisering](oidc_protocol_token) (`client_secret_basic`, `client_secret_post`, eller `private_key_jwt`)
- [ ] 🔒 **Krav:** Sende `code_verifier` i token-forespørselen — fullfører PKCE-flyten
- [ ] 🔒 **Krav:** [Validere ID-token](oidc_protocol_id_token): signatur, `iss`, `aud`, `exp`, `iat`, `nonce`, og at `acr` matcher forespurt nivå — mangelfull validering er ein vanleg sikkerheitsfeil
- [ ] Respektere token-levetider og bruke refresh_token for fornyelse

## Sesjonshåndtering

- [ ] 🔒 **Krav:** **Implementere [Single Logout (SLO)](oidc_func_sso)** — kritisk for alle som bruker SSO. Feilkonfigurert logout hos éin kunde kan øydelegge for andre.
- Scenario 1: Bruker logger ut hos deg → redirect til /endsession
- Scenario 2: Bruker logger ut annet sted → håndter `front_channel_logout` basert på `sid`
- [ ] 🔒 **Krav:** Sette lokal sesjon til maks 30 minutter inaktivitet
- [ ] 🔒 **Krav:** Sende bruker til ID-porten med ny autentiseringsforespørsel ved lokal timeout
- [ ] 🔒 **Anbefalt:** Bruk `prompt=login` for [tvungen re-autentisering](oidc_guide_idporten#tvungen-re-autentisering) ved sikkerheitskritiske operasjonar
- [ ] 🔒 **Anbefalt:** Vurder [isolert SSO-sesjon](oidc_func_nosso) for tenester som ikkje skal dele sesjon

## Sikkerhet og nøkkelhåndtering

- [ ] 🔒 **Krav:** Etabler sikker nøkkelhåndtering — beskytt private nøklar (client_secret, asymmetriske nøklar, virksomheitssertifikat). Definer prosedyrar for oppbevaring, backup, tilgangsstyring, fornyelse og kompromitteringshåndtering
- [ ] 🔒 **Krav:** Gjennomfør risikovurdering — bruk til å velje sikkerheitsnivå og autentiseringsmetode
- [ ] 🔒 **Krav:** Åpne utgåande brannmur for [ID-portens IP-adresser](../../general/IP) (om aktuelt)
- [ ] 🔒 **Anbefalt:** Bruk HSM for nøkkeloppbevaring
- [ ] 🔒 **Anbefalt:** Bruk [virksomhetssertifikat](idporten_overordnet#bruk-av-virksomhetssertifikat) for klientautentisering og automatisert nøkkelrotasjon

## Logging

- [ ] 🔒 **Krav:** Logg autentiseringsforsøk: tidspunkt, handling, resultat, IP-adresse, `sid`
- [ ] 🔒 **Krav:** Vurder personvern i logging (fødselsnummer vs. behov)
- [ ] 🔒 **Anbefalt:** Følg [anbefalingar for sertifikatbehandling, logging og sporing](https://www.digdir.no/datadeling/sertifikatbehandling-logging-og-sporing/2438)

## Testing

- [ ] Utfør [verifikasjonstester](idporten_verifikasjonstester) med [testbrukere](idporten_testbrukere)
- [ ] Test i testmiljø (tillater redirect til localhost)

## Spesielle bruksområder

- [ ] **Mobilapper**: Følg [integrasjonsguide for app](oidc_auth_app)
- [ ] **SPA/JavaScript**: Følg [integrasjonsguide for SPA](oidc_auth_spa)
- [ ] **API-sikring**: Implementer [brukerstyrt datadeling](oidc_auth_oauth2) korrekt
- [ ] **Fullmakt**: Implementer [innlogging på vegne av andre](oidc_auth_fullmakt)

## Tilleggsfunksjonalitet (valgfritt)

- [ ] Hente brukerinfo via `profile`-scope fra [userinfo-endepunktet](oidc_protocol_userinfo)
- [ ] Hente kontaktopplysninger fra [KRR](../../Kontaktregisteret/Brukerspesifikt-oppslag_rest) via `krr:user/kontaktinformasjon.read`
- [ ] Vurdere støtte for [utenlandske brukere (eIDAS)](oidc_func_eidas)

## Ved problemer

Kontakt servicedesk@digdir.no — oppgi client_id, miljø og beskrivelse.

## Ressurser

- [Integrasjonsguide for ID-porten](oidc_guide_idporten)
- [Overordnet arkitekturbeskrivelse](idporten_overordnet)
- [Samarbeidsportalen](https://samarbeid.digdir.no/id-porten/id-porten/18)
- [Integrasjonsguide - Autentisering med OpenID Connect](oidc_guide_idporten)
- [Overordnet arkitekturbeskrivelse](idporten_overordnet)
- [Klientregistrering](oidc_func_clientreg)
- [PKCE - Proof Key for Code Exchange](oidc_func_pkce)
- [PAR - Pushed Authorization Request](oidc_protocol_par)
- [ID-token dokumentasjon](oidc_protocol_id_token)
- [Access-token dokumentasjon](oidc_protocol_access_token)
- [Token-endepunkt](oidc_protocol_token)
- [Autorisasjonsendepunkt](oidc_protocol_authorize)
- [Single Sign-On og utlogging](oidc_func_sso)
- [Backchannel logout](oidc_func_backchannel_logout)
- [Verifikasjonstester](idporten_verifikasjonstester)
- [Testbrukere](idporten_testbrukere)
- [OpenID Connect Core 1.0 spesifikasjon](https://openid.net/specs/openid-connect-core-1_0.html)
- [RFC 7636 - PKCE](https://tools.ietf.org/html/rfc7636)
- [Veileder for virksomhetsautentisering](https://www.digdir.no/datadeling/sertifikatbehandling-logging-og-sporing/2438)
- [Veileder for identifikasjon og sporbarhet](https://www.digdir.no/digital-samhandling/veileder-identifikasjon-og-sporbarhet-i-elektronisk-kommunikasjon-med-og-i-offentlig-sektor/2992)