From 9a41c6b6a155982759d225083001aa9bcb2cde4f Mon Sep 17 00:00:00 2001 From: joergenb Date: Wed, 12 Aug 2026 09:58:28 +0200 Subject: [PATCH 1/3] utkast til doc revokasjon --- _docs/lommebok/lommebok_revokering.md | 97 +++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 _docs/lommebok/lommebok_revokering.md diff --git a/_docs/lommebok/lommebok_revokering.md b/_docs/lommebok/lommebok_revokering.md new file mode 100644 index 00000000..4df04148 --- /dev/null +++ b/_docs/lommebok/lommebok_revokering.md @@ -0,0 +1,97 @@ +--- +title: Revokering av bevis +--- + +# Revokering av bevis + +Utstedarar i sandkassa kan no *revokere* bevis dei har utstedt. Revokering brukast når eit bevis ikkje lenger skal vere gyldig — til eksempel fordi grunnlagsdataa har endra seg, brukaren har mista retten til beviset, eller beviset blei utstedt ved ein feil. + +## Teknisk mekanisme + +Revokering er implementert etter IETF-spesifikasjonen [Token Status List (TSL)](https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/), som gjeld for både SD-JWT- og mdoc-baserte bevis. + +Kort fortalt: + +- Alle bevis frå Bevisporten inneheld ein `status`-claim med eit `status_list`-objekt som peikar til ein **Status List Token** via `uri`, og gir bevisets plass i lista via `idx`. +- Status List Token er ein signert JWT/CWT (media type `application/statuslist+jwt` for SD-JWT-bevis, `application/statuslist+cwt` for mdoc) som samlar statusen for mange bevis i éi komprimert bitliste. +- I dagens implementasjon brukar Bevisporten 1 bit per bevis: `0` = gyldig, `1` = revokert. Det finst ikkje eigne mellomtilstandar (som «suspendert») i denne versjonen. + +Status List Token-en er offentleg tilgjengelig og kan hentast utan autentisering — sjå [Som brukarstad: sjekke status](#som-brukarstad-sjekke-status) under. + +## Som utstedar: trigge revokering + +Bevisporten sin API har to endepunkt for å revokere bevis, avhengig av kva utstedingsflyt beviset opphavleg blei utstedt gjennom. Begge er PUT-kall og krev eit gyldig Maskinporten-token med korrekt scope for utstedaren din. + +| Flyt | Endepunkt | Bruk | +|---|---|---| +| Pre-authorized code flow | `PUT /api/v1/credential/revoke`
`PUT /{tenant}/api/v1/credential/revoke` | Revokerer eit spesifikt bevis, identifisert med `issuance_transaction_id`. | +| Authorization code flow | `PUT /api/v1/credential/revoke/by-subject`
`PUT /{tenant}/api/v1/credential/revoke/by-subject` | Revokerer **alle** bevis utstedt for ein gitt `subject.identifier` og `credential_configuration_id`. | + +### Revoke i pre-authorized code flow + +Request body (`PreAuthCredentialRevokeRequest`): + +```json +{ + "credential_configuration_id": "some.known.credential_mso_mdoc", + "issuance_transaction_id": "xyz123..." +} +``` + +- `credential_configuration_id` — identifikatoren for bevistypen, slik den er definert i utstedar-metadataen din. +- `issuance_transaction_id` — ID-en frå utstedingstransaksjonen (samme ID som blei brukt/returnert da beviset blei oppretta via `POST /{tenant}/api/v1/credential/issuance-transaction`). + +Svar: `204 No Content` ved suksess. + +### Revoke i authorization code flow + +Request body (`AuthCodeCredentialRevokeRequest`): + +```json +{ + "credential_configuration_id": "some.known.credential_mso_mdoc", + "subject": { + "identifier": "12345678901" + } +} +``` + +- `credential_configuration_id` — identifikatoren for bevistypen. +- `subject.identifier` — subjektidentifikatoren (typisk fødsels-/D-nummer eller organisasjonsnummer) som beviset/beviset er utstedt til. + +Merk at dette revokerer **alle** bevis som matchar både `credential_configuration_id` og `subject.identifier` — ikkje berre eitt enkelt bevis. Svar: `204 No Content` ved suksess. + +### Tenant + +Begge endepunkta finst også i ein tenant-spesifikk variant, `/{tenant}/api/v1/credential/revoke...`, der `{tenant}` er tenant-identifikatoren din (t.d. `bevisgenerator`) — på samme måte som for dei andre credential-endepunkta i API-et. + +Full OpenAPI-spesifikasjon finn du i [Swagger UI](https://utsteder.test.eidas2sandkasse.net/swagger-ui/index.html#/). + +## Dekning + +Revokering er tilgjengelig for **alle bevistypar** som utstedast gjennom Bevisporten i dag — det er ikkje avgrensa til bestemte `credential_configuration_id`-verdiar. + +## Som brukarstad: sjekke status + +Brukarstader bør utvide valideringa som er beskrive i [OpenID4VP](./lommebok_protokoll_vp.html) med ei statuskontroll: + +1. Valider beviset som normalt (signatur, tillitsliste, at utstedar er autorisert for bevistypen, holder-binding). +2. Les `status.status_list.uri` og `status.status_list.idx` frå beviset. +3. Hent Status List Token med eit HTTP GET-kall mot `uri` (`Accept: application/statuslist+jwt` for SD-JWT-bevis, `application/statuslist+cwt` for mdoc). Dette kallet krev ikkje autentisering. +4. Valider signaturen på Status List Token-en, og respekter `exp`/`ttl` for cache av responsen. +5. Dekomprimer bitlista og les verdien på indeksen `idx`. +6. Om verdien er `1`, er beviset revokert og skal avvisast. Om verdien er `0`, er beviset framleis gyldig med tanke på revokering — dei andre valideringssjekkane gjeld framleis. + +## Grenser i dagens versjon + +- Berre binær status (gyldig/revokert) er støtta — ingen mellomtilstand som «suspendert». +- Det er ikkje definert feilkodar eller feil-body for revoke-endepunkta, utover `204 No Content` ved suksess. +- Revokering gjeld heile beviset/subjektet — det er ikkje mogleg å revokere berre enkelte claims i eit bevis. + +## Sjå også + +- [OpenID4VCI](./lommebok_protokoll_vci.html) — korleis bevis blir utstedt +- [OpenID4VP](./lommebok_protokoll_vp.html) — korleis bevis blir verifisert +- [Digdir som utsteder](./lommebok_digdir_utsteder.html) +- [Swagger UI for Bevisporten](https://utsteder.test.eidas2sandkasse.net/swagger-ui/index.html#/) +- [IETF draft: Token Status List (TSL)](https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/) From 35cffa13b55a24fc3e2b71542359f67aca17d453 Mon Sep 17 00:00:00 2001 From: joergenb Date: Fri, 14 Aug 2026 11:10:17 +0200 Subject: [PATCH 2/3] fix etter review --- _docs/lommebok/lommebok_revokering.md | 68 +++++++++++++++------------ 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/_docs/lommebok/lommebok_revokering.md b/_docs/lommebok/lommebok_revokering.md index 4df04148..432001b5 100644 --- a/_docs/lommebok/lommebok_revokering.md +++ b/_docs/lommebok/lommebok_revokering.md @@ -4,7 +4,7 @@ title: Revokering av bevis # Revokering av bevis -Utstedarar i sandkassa kan no *revokere* bevis dei har utstedt. Revokering brukast når eit bevis ikkje lenger skal vere gyldig — til eksempel fordi grunnlagsdataa har endra seg, brukaren har mista retten til beviset, eller beviset blei utstedt ved ein feil. +Utstedarar i sandkassa kan no *revokere* bevis dei har utstedt. Revokering brukast når eit bevis ikkje lenger skal vere gyldig — til eksempel fordi grunnlagsdata har endra seg, brukaren har mista retten til beviset, eller beviset vart utstedt ved ein feil. ## Teknisk mekanisme @@ -12,20 +12,48 @@ Revokering er implementert etter IETF-spesifikasjonen [Token Status List (TSL)]( Kort fortalt: -- Alle bevis frå Bevisporten inneheld ein `status`-claim med eit `status_list`-objekt som peikar til ein **Status List Token** via `uri`, og gir bevisets plass i lista via `idx`. -- Status List Token er ein signert JWT/CWT (media type `application/statuslist+jwt` for SD-JWT-bevis, `application/statuslist+cwt` for mdoc) som samlar statusen for mange bevis i éi komprimert bitliste. -- I dagens implementasjon brukar Bevisporten 1 bit per bevis: `0` = gyldig, `1` = revokert. Det finst ikkje eigne mellomtilstandar (som «suspendert») i denne versjonen. +- Alle bevis frå Bevisporten inneheld ein `status`-objekt som peiker på ei statusliste via `uri`, og gir beviset sin plass i lista via `idx`. +- Status List Token er ein signert JWT som samlar statusar for mange bevis i éi komprimert bitliste. +- I dagens implementasjon brukar Bevisporten 2 bit per bevis og har to mogelgheiter: `00` = gyldig, `01` = revokert. Status List Token-en er offentleg tilgjengelig og kan hentast utan autentisering — sjå [Som brukarstad: sjekke status](#som-brukarstad-sjekke-status) under. -## Som utstedar: trigge revokering -Bevisporten sin API har to endepunkt for å revokere bevis, avhengig av kva utstedingsflyt beviset opphavleg blei utstedt gjennom. Begge er PUT-kall og krev eit gyldig Maskinporten-token med korrekt scope for utstedaren din. +## Tilgjengelegheit + +Revokering er tilgjengelig og som default aktivert for **alle bevistypar** i Bevisporten i dag. Det er mogeleg å deaktivere per bevistype ved å ta kontakt med Digdir. + + +## Validere revokasjons-status + +Brukarstader som treng vite om eit bevis er revokert, må utvide valideringa som er beskrive i [OpenID4VP](./lommebok_protokoll_vp.html) med ei statuskontroll: + +1. Valider beviset som normalt (signatur, tillitsliste, at utstedar er autorisert for bevistypen, holder-binding). +2. Les `status.status_list.uri` og `status.status_list.idx` frå beviset. +3. Hent Status List Token med eit HTTP GET-kall mot `uri` (`Accept: application/statuslist+jwt`). Dette kallet krev ikkje autentisering. +4. Valider signaturen på Status List Token-en, og respekter `exp`/`ttl` for cache av responsen. +5. Dekomprimer bitlista og les verdien på indeksen `idx`. +6. Om verdien er `01`, er beviset revokert og skal avvisast. Om verdien er `00`, er beviset ikkje revokert (Du må framleis sjekke gyldigheitsperiode, eller andre bevistype-spesifikke valideringar som står i rulebook). + + +## Trigge revokering som sluttbrukar + +Gå til [revokasjonssida i Bevisgenerator](https://bevisgenerator.test.eidas2sandkasse.net/revoke), velg bevistypen du vil revokere, og skriv inn fødselsnummeret til testbrukaren din. + + +## Trigge revokering som utstedar + +Bevisporten sitt API har to endepunkt for å revokere bevis, avhengig av kva utstedingsflyt som vart nytta ved utstedelse. Begge er PUT-kall og krev eit gyldig Maskinporten-token utstedt til organisasjon som eig bevistypen. | Flyt | Endepunkt | Bruk | |---|---|---| | Pre-authorized code flow | `PUT /api/v1/credential/revoke`
`PUT /{tenant}/api/v1/credential/revoke` | Revokerer eit spesifikt bevis, identifisert med `issuance_transaction_id`. | -| Authorization code flow | `PUT /api/v1/credential/revoke/by-subject`
`PUT /{tenant}/api/v1/credential/revoke/by-subject` | Revokerer **alle** bevis utstedt for ein gitt `subject.identifier` og `credential_configuration_id`. | +| Authorization code flow | `PUT /api/v1/credential/revoke/by-subject`
`PUT /{tenant}/api/v1/credential/revoke/by-subject` | Revokerer **alle** bevis utstedt for ein gitt `subject.identifier` (normalt fødselsnummer) og `credential_configuration_id`. | + +Begge endepunkta finst også i ein tenant-spesifikk variant, `/{tenant}/api/v1/credential/revoke...`, der `{tenant}` er tenant-identifikatoren din (t.d. `pid`) — på samme måte som for dei andre credential-endepunkta i API-et. + +Full OpenAPI-spesifikasjon finn du i [Swagger UI](https://utsteder.test.eidas2sandkasse.net/swagger-ui/index.html#/). + ### Revoke i pre-authorized code flow @@ -38,7 +66,7 @@ Request body (`PreAuthCredentialRevokeRequest`): } ``` -- `credential_configuration_id` — identifikatoren for bevistypen, slik den er definert i utstedar-metadataen din. +- `credential_configuration_id` — identifikatoren for bevistypen, slik den er definert i utstedar-metadata. - `issuance_transaction_id` — ID-en frå utstedingstransaksjonen (samme ID som blei brukt/returnert da beviset blei oppretta via `POST /{tenant}/api/v1/credential/issuance-transaction`). Svar: `204 No Content` ved suksess. @@ -61,30 +89,12 @@ Request body (`AuthCodeCredentialRevokeRequest`): Merk at dette revokerer **alle** bevis som matchar både `credential_configuration_id` og `subject.identifier` — ikkje berre eitt enkelt bevis. Svar: `204 No Content` ved suksess. -### Tenant - -Begge endepunkta finst også i ein tenant-spesifikk variant, `/{tenant}/api/v1/credential/revoke...`, der `{tenant}` er tenant-identifikatoren din (t.d. `bevisgenerator`) — på samme måte som for dei andre credential-endepunkta i API-et. - -Full OpenAPI-spesifikasjon finn du i [Swagger UI](https://utsteder.test.eidas2sandkasse.net/swagger-ui/index.html#/). - -## Dekning - -Revokering er tilgjengelig for **alle bevistypar** som utstedast gjennom Bevisporten i dag — det er ikkje avgrensa til bestemte `credential_configuration_id`-verdiar. -## Som brukarstad: sjekke status -Brukarstader bør utvide valideringa som er beskrive i [OpenID4VP](./lommebok_protokoll_vp.html) med ei statuskontroll: - -1. Valider beviset som normalt (signatur, tillitsliste, at utstedar er autorisert for bevistypen, holder-binding). -2. Les `status.status_list.uri` og `status.status_list.idx` frå beviset. -3. Hent Status List Token med eit HTTP GET-kall mot `uri` (`Accept: application/statuslist+jwt` for SD-JWT-bevis, `application/statuslist+cwt` for mdoc). Dette kallet krev ikkje autentisering. -4. Valider signaturen på Status List Token-en, og respekter `exp`/`ttl` for cache av responsen. -5. Dekomprimer bitlista og les verdien på indeksen `idx`. -6. Om verdien er `1`, er beviset revokert og skal avvisast. Om verdien er `0`, er beviset framleis gyldig med tanke på revokering — dei andre valideringssjekkane gjeld framleis. -## Grenser i dagens versjon +## Avgrensingar i dagens versjon -- Berre binær status (gyldig/revokert) er støtta — ingen mellomtilstand som «suspendert». +- Berre binær status (gyldig/revokert) er støtta — ingen mellomtilstand som «suspendert» er p.t. implementert. - Det er ikkje definert feilkodar eller feil-body for revoke-endepunkta, utover `204 No Content` ved suksess. - Revokering gjeld heile beviset/subjektet — det er ikkje mogleg å revokere berre enkelte claims i eit bevis. @@ -92,6 +102,6 @@ Brukarstader bør utvide valideringa som er beskrive i [OpenID4VP](./lommebok_pr - [OpenID4VCI](./lommebok_protokoll_vci.html) — korleis bevis blir utstedt - [OpenID4VP](./lommebok_protokoll_vp.html) — korleis bevis blir verifisert -- [Digdir som utsteder](./lommebok_digdir_utsteder.html) +- [Digdir sin utsteder](./lommebok_digdir_utsteder.html) - [Swagger UI for Bevisporten](https://utsteder.test.eidas2sandkasse.net/swagger-ui/index.html#/) - [IETF draft: Token Status List (TSL)](https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/) From 33ebfebca66f9f599e1cb9172c70f1a677b43dac Mon Sep 17 00:00:00 2001 From: joergenb Date: Fri, 14 Aug 2026 11:18:21 +0200 Subject: [PATCH 3/3] meir fixer --- _data/lommebok.yml | 3 +++ _docs/lommebok/lommebok_digdir_utsteder.md | 2 +- ...ok_revokering.md => lommebok_digdir_utsteder_revokering.md} | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) rename _docs/lommebok/{lommebok_revokering.md => lommebok_digdir_utsteder_revokering.md} (98%) diff --git a/_data/lommebok.yml b/_data/lommebok.yml index 3bda4192..c3c0aeae 100644 --- a/_data/lommebok.yml +++ b/_data/lommebok.yml @@ -87,6 +87,9 @@ folders: - title: Utsteder, Bevisgenerator jurl: /docs/lommebok/lommebok_digdir_utsteder_bevisgenerator.html + - title: Utsteder, revokering + jurl: /docs/lommebok/lommebok_digdir_utsteder_revokering.html + - title: Andres tenester folderitems: diff --git a/_docs/lommebok/lommebok_digdir_utsteder.md b/_docs/lommebok/lommebok_digdir_utsteder.md index fb3e553d..8301c694 100644 --- a/_docs/lommebok/lommebok_digdir_utsteder.md +++ b/_docs/lommebok/lommebok_digdir_utsteder.md @@ -42,12 +42,12 @@ Features som er støtta no: - Authorization-code flow - Bruksmønster 1,2,3 - Multitenancy (logiste utstedere) +- [Revokasjon](lommebok_digdir_utsteder_revokering.html) Framtidig funksjonalitet: - tx_code - Web-grensesnitt for sluttbrukar - key binding -- Bevis-type-spesifikke signeringssertifikat - Autentisering og autorisasjon av lommebøker basert på WUA - verifisering mot [OpenID conformance test suites](https://openid.net/certification/conformance-testing-for-openid-for-verifiable-credential-issuance/) diff --git a/_docs/lommebok/lommebok_revokering.md b/_docs/lommebok/lommebok_digdir_utsteder_revokering.md similarity index 98% rename from _docs/lommebok/lommebok_revokering.md rename to _docs/lommebok/lommebok_digdir_utsteder_revokering.md index 432001b5..5c409a62 100644 --- a/_docs/lommebok/lommebok_revokering.md +++ b/_docs/lommebok/lommebok_digdir_utsteder_revokering.md @@ -1,5 +1,8 @@ --- title: Revokering av bevis +sidebar: lommebok +product: lommebok +redirect_from: /lommebok_digdir_utsteder_revokering --- # Revokering av bevis