diff --git a/_docs/Maskinporten/maskinporten_checklist.md b/_docs/Maskinporten/maskinporten_checklist.md new file mode 100644 index 00000000..c59c2566 --- /dev/null +++ b/_docs/Maskinporten/maskinporten_checklist.md @@ -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 ` +- [ ] 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) diff --git a/_docs/Maskinporten/maskinporten_samtykke_checklist.md b/_docs/Maskinporten/maskinporten_samtykke_checklist.md new file mode 100644 index 00000000..2cfca150 --- /dev/null +++ b/_docs/Maskinporten/maskinporten_samtykke_checklist.md @@ -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) diff --git a/_docs/ansattporten/ansattporten_checklist.md b/_docs/ansattporten/ansattporten_checklist.md new file mode 100644 index 00000000..99267e3f --- /dev/null +++ b/_docs/ansattporten/ansattporten_checklist.md @@ -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) diff --git a/_docs/idporten/idporten_checklist.md b/_docs/idporten/idporten_checklist.md new file mode 100644 index 00000000..d8cd67e6 --- /dev/null +++ b/_docs/idporten/idporten_checklist.md @@ -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)