Zorgaanbiederauthenticatie en -autorisatie
0.1.0 - prototype

Publish Box goes here

Referentie-implementatie

Referentie-implementatie en workbench

De repository maakt het profiel uitvoerbaar en inspecteerbaar. Zij toont één mogelijke architectuur, geen voorgeschreven productopdeling. Andere implementaties mogen componenten combineren of anders deployen zolang dezelfde vertrouwensgrenzen, bewijzen en controles aantoonbaar blijven.

Moduleverantwoordelijkheden

Module Verantwoordelijkheid Onafhankelijk van
protocol-core organisatie- en resource-identifiers, trustmodel, RAR, policy, events en poorten Ktor, HAPI, Nimbus, bestanden en runtimeconfiguratie
protocol-jose client assertions, access tokens, JWKS-verificatie, DPoP en JOSE-decoding HTTP-server, UI en FHIR-payload
app uitvoerbare Ktor-rollen, mTLS, demo-PKI, trustservices, FHIR-server, flowregie en web-API browserweergave
ui stapsgewijze weergave van protocolgebeurtenissen, wirebeelden, claims, controles en FHIR-resultaat private keys en directe toegang tot mTLS-endpoints
ig technisch profiel, rationale, implementatiecriteria en referentiemapping runtime-uitvoering

Uitvoerbare rollen

De demo start afzonderlijke lokale HTTPS-rollen:

Rol Code Lokaal endpoint
Vertrouwensvoorziening app/src/main/kotlin/nl/cumuluz/auth/app/trust/TrustServices.kt https://localhost:9443
Authorization server app/src/main/kotlin/nl/cumuluz/auth/app/oauth/AuthorizationServer.kt https://localhost:9444
FHIR resource server app/src/main/kotlin/nl/cumuluz/auth/app/fhir/FhirServer.kt https://localhost:9445
Clientsysteem en flowregie app/src/main/kotlin/nl/cumuluz/auth/app/adapter/ReceivingAdapter.kt interne mTLS-client
Onderwijs-API en statische UI app/src/main/kotlin/nl/cumuluz/auth/app/web/WebApi.kt http://localhost:9080

De browser spreekt alleen met de onderwijs-API. ReceivingAdapter voert de echte mTLS-token- en FHIR-requests uit. Daardoor komen clientcertificaat en private protocolkeys niet in browsercode terecht.

Mapping van profiel naar workbench

UI-stap Protocolfase Actor Soort Belangrijkste code Gecontroleerde foutproeven
select use-case kiezen clientsysteem lokaal DemoController, Scenario geen; securityflow blijft gelijk
discover vertrouwde discovery clientsysteem ↔ trust netwerk TrustServiceClient.organization, TrustServiceClient.certificateStatus onbekende registratie of ingetrokken broncertificaat stopt de flow; onbetrouwbare JWKS wordt later zichtbaar
assert client assertion maken clientsysteem lokaal ClientAssertionService.create verlopen assertion, assertion replay en ongeldige assertiontypewaarde worden bij token-request afgewezen
rar autorisatieverzoek maken clientsysteem lokaal AuthorizationDetails, AuthorizationPolicy resource/location-mismatch, verkeerde doel-URA, onjuist purpose
token-request client-, RAR- en DPoP-controle; tokenuitgifte clientsysteem ↔ authorization server netwerk AuthorizationServer, ClientAssertionService.validate, DpopService.validate, AccessTokenService.issue assertionfouten, ingetrokken certificaat, RAR-fouten
token-validate uitgegeven token controleren clientsysteem lokaal plus JWKS-ophaling AccessTokenService.validateForClient onbetrouwbare JWKS, ontbrekende RAR, uitgeschakelde controle, verlopen token
fhir-request beveiligde resourceaanroep clientsysteem ↔ resource server netwerk ReceivingAdapter, DpopService.createProof verkeerde DPoP-key en Bearer-downgrade worden door server beoordeeld
fhir-validate token-, policy- en proofcontrole resource server lokaal FhirServer, AccessTokenService.validateForClient, DpopService.validate key mismatch, DPoP replay, Bearer-downgrade
fhir-response geautoriseerde payload terugsturen resource server ↔ clientsysteem netwerk FhirServer, FixtureRepository alleen bereikbaar na alle controles
audit gescheiden verantwoording URA-A en URA-B lokaal ReceivingAdapter.audit, FlowResult afgewezen flows krijgen eveneens een audituitkomst

De toelichtende UI-tekst staat in ui/src/stepContent.ts. SequenceLanes.tsx toont actor en richting; StepInspector.tsx toont gewone taal, technische context, beslisregels, gesanitiseerde wirebeelden, publieke claims en standaardverwijzingen.

De UI noemt de gecombineerde trustlane Gedeelde vertrouwenslaag en toont daar Registratie + status. Dit is een visuele groepering: de organisatieregistratie en broncertificaatstatus worden bij discovery afzonderlijk gecontroleerd; de authorization server controleert later afzonderlijk de certificaatstatus van de client.

Cryptografie en transport

De referentie gebruikt:

  • P-256 / ES256 voor client assertions, access tokens en DPoP;
  • organisatie-signing keys voor URA-A en URA-B die uit de keypairs van hun geregistreerde demo-certificaten worden opgebouwd;
  • een afzonderlijke, vluchtige DPoP-key per run;
  • een runtimegegenereerde demo-CA en aparte certificaten per HTTPS-rol;
  • echte mTLS voor trust-, token- en resourceverkeer;
  • in-memory, tijdsgebonden replaystores.

DemoPki schrijft lokale PKCS#12-stores onder app/build/demo-pki/. De wachtwoorden blijven alleen in het proces. kid is in de demo de SHA-256-thumbprint van het bijbehorende certificaat. Deze constructie maakt de conceptuele certificaatbinding en het TLS-gedrag testbaar, maar schrijft geen productie-PKI, certificaatprofiel of sleutelbeheer voor.

Wirebeelden en geheimen

WireSanitizer verwijdert Authorization- en DPoP-inhoud en redigeert compacte assertions. De workbench toont wel:

  • requestregel en niet-geheime headers;
  • veilige request- en responsebody;
  • publieke JOSE-header en claims;
  • beslisregel-id en resultaat;
  • actor, tijd en correlatie.

Deze onderwijsweergave is geen packet capture en geen productie-auditlog.

Starten

Bouw eerst de IG en start daarna de complete runtime:

cd ig
npm ci
./_genonce.sh
cd ..
GRADLE_USER_HOME=$PWD/.gradle ./gradlew :app:run --no-daemon

Open:

  • workbench: http://localhost:9080;
  • Implementation Guide: http://localhost:9080/ig/.

Kies een use-case en gebruik Volgende stap om de werkelijk uitgevoerde flow stapsgewijs te openen. De foutselector laat zien bij welke actor een tegenstrijdig of onbetrouwbaar bewijs wordt afgewezen.

Bewijsgrens

De tests voor protocol-core en protocol-jose controleren policy en cryptografie. De app-tests controleren end-to-end flow, fouten, echte mTLS en web-API. UI-tests controleren de uitleg en interactie. De IG-build controleert conformanceartefacten, links en publicatie.

Geen van deze suites bewijst productiehardening, beschikbaarheid van landelijke voorzieningen of inhoudelijke conformiteit van de klinische voorbeelden.