Page History
Leverancen består af et Docker image som er baseret på Keycloak (https://www.keycloak.org/) version 26.4.0. I dette
standard Keycloak Docker image er der installeret extensions som udvider funktionaliteten for at understøtte EHMI
pilotprojektet. Ud over nedenstående dokumentation henvises til dokumentationen af standard Keycloak på
https://www.keycloak.org/
Logning af certifikatstatus
NSP Keycloak indeholder en extension som kører et job til at logge certifikatstatus med konfigurerbare intervaller.
Der bør etableres overvågning af loggen for at identificere evt. spærring eller snarligt udløb af disse certifikater.
Formatet på disse logs beskrives nedenfor.
...
Når dayToExpiry er mindre en f.eks. 30 bør der udløses en alarm/ notifikation.
Nar revocationStatus er forskellig fra VALID bør der udløses en alarm.
Konfiguration af NSP OpenID Connect (OIDC) Keycloak server med NSP plugins
Dette projekt Keycloak konfigureres ved hjælp af Terraform og Keycloaks Terraform provider. Projektet https://git.nspop.dk/scm/con/keycloak-configuration.git indeholder Terraform konfigurationsfiler til at konfigurer Keycloak installationerne i EHMI projektet.
...
├── README.md
└── terraform
└── configuration
├── modules
├── localhost
├── test1
└── test1test2
modules
Denne folder indeholder konfigurationer (i form af Terraform moduler) som bruges generelt for installationer på alle
miljøer.
...
Denne folder indeholder konfiguration af NSP test1 miljøet. OBS: State er ikke git ignored for denne folder. Det betyder
at enhver vedligholdelse af Keycloak på test1 skal koordineres således at der ikke kan opstå merge konflikter i Terraform
state (~ major headache)Terraform state gemmes på deploy serveren.
test2
Denne folder indeholder konfiguration af NSP test2 miljøet. Terraform state gemmes på deploy serveren.
Keycloak Terraform provider
Der benyttes i øjeblikke en fork af terraform som skal hentes fra dette repo : https://github.com/Flintholm/terraform-provider-keycloak
Formålet med denne fork er at understøtte brugen af `key_use` som er en forudsætning for at installere Java Keystores.
Når den er clonet, kan en lokal version bygges med `make build`. Se README.md i provideren (#development) for detaljer.
Resultatet er en binær version af Keycloak Terraform provideren.
For at denne bruges af Terraform (istedet for den officielle keycloak/keycloak provider) skal der laves en fil `~/.terraformrc` med
følgende indhold:
...
skal benyttes Keycloak provider version >= 5.8.0 for at understøtte keyUse i Java keyproviders i Keycloak.
Stien til provideren rettes selvfølgelig til så den passer til den folder hvor du har bygget provideren.
Hvordan opdateres Keycloak konfiguration via Terraform ?
Dette er en kort vejledning i hvordan Terraform bruges til at konfigurer NSP Keycloak installationer.
...
- Terraform er installeret
- Fork'et Terraform Keycloak provider er bygget og konfigureret som beskrevet ovenfor
Localhost
Ved konfiguration af localhost ligger al Terraform state lokalt. I det følgende antages det at der kører en lokal installation af NSP Keycloak via docker compose i ```localhost``` folderen i selve Keycloak projektet.
...
rm -rf .terraform
rm -rf .terraform.lock.hcl
rm -rf terraform.tfstate
rm -rf terraform.tfstate.backup
NSP
...
miljøer
Princippet er præcist det samme som ved localhost ovenfor. Dog er der den væsentlige forskel at Terraform state er
checket ind i dette git repo. State skal altid repræsentere hvad der er konfigureret i Test1. Dvs. processen for at
lave opdateringer i f.eks. Test1 skal være
...
Alternativet til denne manuelle process for at sikre Terraform state ikke kommer ud af sync, er at benytte en anden
storage mekanisme til state. F.eks. understøtter Terraform S3 kompatibel storage af state, hvor Terraform skriver
locks for at undgå at state kommer ud af sync.
Klient registrering og opdatering (DCR)
Keycloak understøtter OpenID Connect Dynamic Client Registration (DCR) og flere andre klient registrerings
protokoller. Til NSP brug er Keycloaks DCR udvidet til at håndtere følgende ekstra attributter i klient
metadata:
...
Se https://www.keycloak.org/securing-apps/client-registration for generel oplysning om Keycloaks DCR.
Scripts til at kalde DCR
Brugen af DCR beskrevet i https://openid.net/specs/openid-connect-registration-1_0.html
Klient metadata og scripts til at kalde DCR ligger i repo https://git.nspop.dk/scm/con/keycloak-clients.git
For at gøre det lidt nemmere at oprette og vedligeholde klienter manuelt er der lavet 4 shell scripts
til at kalde registrerings endpoints.
...
URL'en ("registration_endpoint") til brug i "import_client.sh" kan findes i realmet's .well-known dokument, f.eks. her
https://keycloak-test.nspop.dk/auth/realms/ehmi/.well-known/openid-configuration
Navngivningskonvention for client metadata
For hver organisation er der oprettet en folder med dennes klient metadata - f.eks. Trifork og Systematic.
Oprettelse af klient
Når der skal oprettes en ny klient gemmes klientmetadata json dokumentet med suffix '.v000' - f.eks. ```myclient-v000.json```. Klienten oprettes ved at POST'e denne json fil til Keycloaks DCR endpoint. Dette kan gøres nemt med følgende kommando:
...
$ ./import_client.sh
Usage:
./import_client.sh [keycloak baseurl] [keycloak admin username] [keycloak admin password] [realm] [client metadata file]
$
$ ./import_client.sh https://keycloak.local/auth admin Test1234 eas client1-metadata.json
Get access token
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1654 100 1582 100 72 12717 578 --:--:-- --:--:-- --:--:-- 13338
Create Initial Access Token
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 614 100 581 100 33 33360 1894 --:--:-- --:--:-- --:--:-- 36117
{"redirect_uris":["https://ehmi-client.local:8443/login/oauth2/code/oauth-par"],"token_endpoint_auth_method":"tls_client_auth",
"token_endpoint_auth_signing_alg":"PS256","grant_types":["client_credentials"],"response_types":[],"client_id":"957e5d96-9ff2-4266-a7c8-cef121104151",
"client_name":"EHMI Testklient script","scope":"EDS system/AuditEvent.crs","subject_type":"public","id_token_signed_response_alg":"PS256",
"userinfo_signed_response_alg":"PS256","request_object_signing_alg":"PS256","request_uris":[],"tls_client_certificate_bound_access_tokens":true,
"tls_client_auth_subject_dn":"subject=C=DK,2.5.4.97=#0c0e4e5452444b2d3936303234313430,O=Testorganisation nr. 96024140,SERIALNUMBER=UI:DK-O:G:7bd0d84a-c1f3-4650-a351-4235c482ebeb,CN=System 1",
"dpop_bound_access_tokens":false,"post_logout_redirect_uris":["https://ehmi-client.local:8443/login/oauth2/code/oauth-par"],
"client_id_issued_at":1763659448,"registration_client_uri":"https://keycloak.local/auth/realms/eas/clients-registrations/openid-connect/957e5d96-9ff2-4266-a7c8-cef121104151",
"registration_access_token":"eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI4ZDk0M2IzZi0yNzQ3LTQwMGMtYjdjNC0zMTFiYWYyY2E1ZGMifQ.eyJleHAiOjAsImlhdCI6MTc2MzY1OTQ0OCwianRpIjoiZjdiNDAzYzAtNjdlNS0zMzkwLTZiZWYtM2RhZDdjYTE3ZjI2IiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay5sb2NhbC9hdXRoL3JlYWxtcy9lYXMiLCJhdWQiOiJodHRwczovL2tleWNsb2FrLmxvY2FsL2F1dGgvcmVhbG1zL2VhcyIsInR5cCI6IlJlZ2lzdHJhdGlvbkFjY2Vzc1Rva2VuIiwicmVnaXN0cmF0aW9uX2F1dGgiOiJhdXRoZW50aWNhdGVkIn0.aBIPkgU2FSxGr5gu0rv-8FtlH7GVM6-E97UoSPxIKfEX_OW58uV7evYk4Gqzkx2oY5lyH9KIz5BSlpKbjenF-w",
"backchannel_logout_session_required":false,"require_pushed_authorization_requests":false,"frontchannel_logout_session_required":false}
Opdatering af klient
Hvis en klient skal opdateres oprettes der et json dokument med navnet "myclient-v001.json". Dette dokument skal indeholde de opdaterede metadata samt "client_id" fra oprettelses responset.
...
./update_client.sh [registration_client_uri] [registration_access_token] [client metadata file]
Sletning af klient
En klient kan slettes med dette script:
./update_client.sh [registration_client_uri] [registration_access_token]
Hent/vis klient
Det er er muligt at hente registret klient oplysninger med denne kommando:
...