Page History
...
| Table of Contents |
|---|
Komponenter
Dette dokument dækker følgende komponenter på NSP:
Identitetssløring af ansatte i sundhedsvæsenet (IDSASDin Digitale Tandlægevælger (DDTV)
Komponenten dækker fire web applikationer 3 services som følger
Type: IDWS SOAP Webservice
Filnavn: idsasddtv-citizen-registrationservice.warwar
Url: <serverurl>/idsas-registrationddtv-citizen-service/2025/05/01
Status-url: <serverurl>/idsasddtv-citizen-registrationservice/status
DKS- Alarm- config
- url: <serverurl>/ idsas
- ddtv-citizen- registration
- service/ 20230601/dksconfig
- alarm
- DKS-config: <serverurl>/idsas-registration/20240124ddtv-citizen-service/dksconfig
Type: DGWS SOAP Webservice
Filnavn: idsasddtv-lookupdentist-service.war
Url: <serverurl>/idsas-lookupddtv-dentist-service/2025/05/01
Status-url: <serverurl>/idsasddtv-dentist-lookupservice/status
DKS- Alarm- config
- url: <serverurl>/ idsas
- ddtv-dentist- lookup
- service/ 20230601/dksconfig
- alarm
- DKS-config: <serverurl>/ idsas
- ddtv-dentist- lookup
- service/ 20240124/
- dksconfig
- Type: SOAP WebserviceWebservlet
- Filnavn: idsasddtv-batch-saltservice.war
- Url: <serverurl>/ idsas
- ddtv-batch- salt
- service
Status-url: <serverurl>/idsasddtv-batch-saltservice/status
DKS-config: <serverurl>/idsas-salt/dksconfig- Type: Webservlet
- Filnavn: idsas-operations.war
- Url: <serverurl>/idsas-operations Status-
Alarm-url: <serverurl>/
idsas-operations/statusVersion-url: <serverurl>/idsas-operations/versionddtv-batch-service/alarm
Konfiguration
Servicekonfiguration
Grundlæggende konfiguration af alle services foregår ved redigering i filerne idsas-registration.properties, idsas-lookupfilen application.properties, idsas-salt.properties og idsas-operations.properties. I alle tilfælde skal de placeres . For den enkelte service placeres filen i følgende WildFly modul:
/pack/wildfly8/modules/dk/nsp/idsasddtv/main/
Moduldefinitionerne for hver service Moduldefinition, som kan anvendes for alle services, findes i kildekoden under:
/<idsas-web-module>/etcetc/wildfly/modules/dk/nsp/idsas/configurationddtv/main/module.xml
I idsas-registration application.properties for DDTV-Citizen servicen kan følgende properties defineres:
Property | Beskrivelse | Påkrævet | Default værdi |
|---|---|---|---|
| idsas.datasource.jndi | Navn på jboss datasource (defineret i idsas-ds.xml) | Ja |
|
| personinformation.url | URL til PersonInformation servicen | Ja | http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-personinformation/v1 |
| personinformation.errorcount.duration | Specificering af hvor lang tid tilbage der skal tælles fejl fra PersonInformation servicen (ifm /status endpointet). Angives som duration i ISO-8601 formattet. | Nej | PT10M (10 minutter) |
| personinformation.error.tolerance | Antal fejl der tolereres fra PersonInformation servicen før /status endpointet angiver servicen som ikke tilgængelig. | Nej | 0 |
| soresclient.url | URL til SORES servicen | Ja | http://test1-cnsp.ekstern-test.nspop.dk:8080/sores/ |
| soresclient.errorcount.duration | Specificering af hvor lang tid tilbage der skal tælles fejl fra SORES servicen (ifm /status endpointet). Angives som duration i ISO-8601 formattet. | Nej | PT10M (10 minutter) |
| soresclient.error.tolerance | Antal fejl der tolereres fra SORES servicen før /status endpointet angiver servicen som ikke tilgængelig. | Nej | 0 |
| dcc.endpoint | Angiver det endpoint, som DCC'en skal kalde. Dette kommer til at fremgå af den XML, der returneres i /dksconfig. | Ja |
|
| idsas.httpclient.pooling.totalconnections | Totale antal HttpClients forbindelser der kan åbnes | Nej | 200 |
| idsas.httpclient.pooling.maxconnections.pr.route | Antal HttpClients forbindelser der kan åbnes pr. rute | Nej | 20 |
| idsas.blurring.expiry.max.days | Antal dage fremme i tiden en sløring må udløbe | Nej | P90D (90 dage) |
| idsas.allowed.client.system.name | Navnet på de systemer, som må kalde "listAllActiveOrgBlurrings" i "idsas-registration" (afdelingssløring). | Nej | http://system.nspop.dk/sts,DRG
|
| idsas.registration.persist.strategy | Om der skal bruges KAFKA eller DATABASE til persistering af sløringer | Ja |
|
| kafka.producer.bootstrap.servers | https://kafka.apache.org/documentation/#producerconfigs_bootstrap.servers | Ja |
|
| kafka.producer.client.id | https://kafka.apache.org/documentation/#producerconfigs_client.id | Ja |
|
| kafka.producer.key.serializer | https://kafka.apache.org/documentation/#producerconfigs_key.serializer | Ja |
|
| kafka.producer.value.serializer | https://kafka.apache.org/documentation/#producerconfigs_value.serializer | Ja |
|
| kafka.producer.max.block.ms | https://kafka.apache.org/documentation/#producerconfigs_max.block.ms | Nej | 10000 |
| kafka.topic | Det topic som IDSAS sender alle beskeder på | Ja |
|
| nsp.kafka.producer.component.name | Ja | Idsas Registration Producer Frontend | |
| nsp.kafka.producer.component.abbreviation | Ja | idsas-producer-frontend | |
| nsp.kafka.producer.component.version |
| Ja | 1.0.0 |
| nsp.kafka.producer.service.name |
| Ja | idsas-producer-frontend |
I idsas-lookup.properties kan følgende properties defineres:
Property | Beskrivelse | Påkrævet | Default værdi |
|---|---|---|---|
| idsas.datasource.jndi | Navn på jboss datasource (defineret i idsas-ds.xml) | Ja |
|
| idsas.allowed.client.system.name | Navnet på de systemer, som må kalde "getBlurredOrganisations" i "idsas-lookup". | Nej | http://system.nspop.dk/sts,DRG
|
| dcc.endpoint | Angiver det endpoint, som DCC'en skal kalde. Dette kommer til at fremgå af den XML, der returneres i /dksconfig. | Ja |
|
| soresclient.url | URL til SORES servicen | Ja | |
| soresclient.errorcount.duration | Specificering af hvor lang tid tilbage der skal tælles fejl fra SORES servicen (ifm /status endpointet). Angives som duration i ISO-8601 formattet. | Nej | PT10M (10 minutter) |
| soresclient.error.tolerance | Antal fejl der tolereres fra SORES servicen før /status endpointet angiver servicen som ikke tilgængelig. | Nej | 0 |
| idsas.httpclient.pooling.totalconnections | Totale antal HttpClients forbindelser der kan åbnes | Nej | 200 |
| idsas.httpclient.pooling.maxconnections.pr.route | Antal HttpClients forbindelser der kan åbnes pr. rute | Nej | 20 |
| idsas.lookup.strategy | Strategien for opslag af sløringer Enten CPR, HASH eller BOTH, alt efter om man slår op på patient_id, patient_id_hashed eller begge. | Ja |
I idsas-salt.properties kan følgende properties defineres:
Property | Beskrivelse | Påkrævet | Default værdi |
|---|---|---|---|
| idsas.datasource.jndi | Navn på jboss datasource (defineret i idsas-ds.xml) | Ja |
|
| idsas.allowed.client.system.name | Navnet på de systemer, som må kalde "getCurrentSalt" i "idsas-salt". | Nej | http://system.nspop.dk/sts,DRG
|
I idsas-operations.properties kan følgende properties defineres:
Property | Beskrivelse | Påkrævet | Default værdi |
|---|---|---|---|
| idsas.datasource.jndi | Navn på jboss datasource (defineret i idsas-ds.xml) | Ja | |
| idsas.cleanup.max.duration | Den tilladte varighed af cleanup jobbet. Angives som duration i ISO-8601 formattet; dog bør kun sekunder angives. | Nej | PT15S (15 sekunder) |
| idsas.cleanup.batch.size | Antal rækker der ryddes op pr. iteration i cleanup jobbet. | Nej | 10000 |
| idsas.cleanup.max.retention | Hvor mange år gammel en række skal være før den må ryddes op af cleanup jobbet. Angives som duration i ISO-8601 formattet; dog kan kun år angives. | Nej | P5Y (5 år) |
| idsas.cleanup.deceased.period | Her angives hvor lang tid der skal gå før sløringer for afdøde personer slettes | P1Y | |
| idsas.cleanup.deceased.batch.size | Her angives hvor mange rækker der ryddes op pr. itegration ved oprydning af sløringer for afdøde personer. |
| 10000 |
| kafka.consumer.bootstrap.servers | https://kafka.apache.org/documentation/#producerconfigs_bootstrap.servers | Ja | kafka:9092 |
| kafka.consumer.client.id | https://kafka.apache.org/documentation/#producerconfigs_client.id | Ja | Idsas |
| kafka.consumer.group.id | https://kafka.apache.org/documentation/#consumerconfigs_group.id | Ja | Idsas |
| kafka.consumer.enable.auto.commit | https://kafka.apache.org/documentation/#consumerconfigs_enable.auto.commit | Ja | false |
| kafka.consumer.auto.offset.reset | https://kafka.apache.org/documentation/#consumerconfigs_auto.offset.reset | Ja | earliest |
| kafka.consumer.key.deserializer | https://kafka.apache.org/documentation/#consumerconfigs_key.deserializer | Ja | org.apache.kafka.common.serialization.StringDeserializer |
| kafka.consumer.value.deserializer | https://kafka.apache.org/documentation/#consumerconfigs_value.deserializer | Ja | org.apache.kafka.common.serialization.StringDeserializer |
| kafka.topic | Det topic som IDSAS sender alle beskeder på | Ja | Idsas-Registration-Topic |
| kafka.poll.timeout | Den timeout der anvende af consumeren ved polling | Ja | 1000 |
| nsp.kafka.consumer.component.name |
| Ja | Idsas Operations Consumer |
| nsp.kafka.consumer.component.abbreviation |
| Ja | idsas-operations-consumer |
| nsp.kafka.consumer.component.version |
| Ja | 1.0.0 |
| nsp.kafka.consumer.service.name |
| Ja | idsas-consumer |
I idsas-patient-id-salt.properties skal følgende property defineres. De bliver kun indlæst fra "lookup"-servicen (tidligere også fra registration):
Property | Beskrivelse | Påkrævet | Default værdi |
|---|---|---|---|
| idsas.patient.id.saltPrefix | Salt til hashing af patientId'ere. Se afsnittet længere nede. | Ja | |
| idsas.patient.id.saltPostfix | Salt til hashing af patientId'ere. Se afsnittet længere nede. | Ja |
log4j konfiguration
Log4j konfiguration for begge services findes i samme wildfly modul som servicekonfigurationen
Se yderligere opsætning i installationsvejledningen.
Salt til hashing af patientId'ere
Til hashing af patientId'ere i databasen, anvendes den salt som er angivet i konfigurations-filen "idsas-patient-id-salt.properties". Salten angives som to tekststrenge; en prefix og en postfix.
Det er vigtigt, at denne salt er stabil og aldrig ændrer sig, efter at den er blevet valgt.
Servicen kan ikke starten op, hvis salten ikke er korrekt angivet.
Der er ingen særlige krav til salten, ud over at den er stabil.
Følgende SQL kan bruges til at genskabe hash-værdien givet de to salt-værdier og patientId'et (som her i eksemplet er sat til "1111111118").
| Code Block | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
select sha2(concat('saltprefix', '1111111118', 'saltpostfix'), 256); |
Overvågning
Alle IDSAS services udstiller en overvågningsside, som findes i listen af komponenter.
Fortolkning af overvågningsside
Overvågningssiderne returnerer enten:
- HTTP 200, hvis servicen i øjeblikket kører fint.
- HTTP 503, hvis der er opstået en fejl der kræver indgriben.
Audit-logning
Hvert servicekald medfører en ny indgang i auditloggen, som kan være udfyldt med følgende komponenter, afhængig af konteksten:
Komponent | Kontekst | Type | Nøgle | Information |
|---|---|---|---|---|
| IDSAS | createBlurring | Personlig | patient-id | Id på borgeren |
| IDSAS | createBlurring | Personlig | patient-id-source | Typen af id (fx "cpr") |
| IDSAS | createBlurring | Personlig | hashed-patient-id | Hashed id på borgeren |
| IDSAS | createBlurring | Ikke personlig | actor-id | Id på organisationen |
| IDSAS | createBlurring | Ikke personlig | actor-id-source | Typen af id (fx "cvr") |
| IDSAS | createBlurring | Ikke personlig | expiry-date-time | Udløbsdato for slørring |
| IDSAS | getCurrentSalt | Ikke personlig | actor-id | Id på organisationen |
| IDSAS | getCurrentSalt | Ikke personlig | actor-id-source | Typen af id (fx "cvr") |
| IDSAS | getCurrentSalt | Ikke personlig | base64-encoded-salt | En base64 encoded string der indeholder den salt, der er returneret. |
| IDSAS | getBlurredOrganisations | Personlig | patient-id | Id på borgeren |
| IDSAS | getBlurredOrganisations | Personlig | patient-id-source | Typen af id (fx "cpr") |
| IDSAS | getBlurredOrganisations | Personlig | active-blurrings-found | Hvorvidt der blev fundet sløringer for borgeren eller ej, i det pågældende opslag. Kan være "true" eller "false". |
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
{
"time": "2023-06-12T11:42:23.664Z",
"category": "dk.sds.nsp.audit.log.idsas",
"audit": {
"timestamp": "2023-06-12T13:42:22.972+02:00",
"components": [
{
"component": "IDSAS",
"contexts": [
{
"context": "createBlurring",
"information": [
{
"key": "cpr",
"type": "RPI",
"value": "1234567890"
},
{
"key": "cvr",
"type": "NPI",
"value": "33257872"
}
]
}
]
}
]
},
"access": {
"code": 200,
"duration": 95,
"httpHeaders": {
"Content-Type": "text/xml;charset=UTF-8",
"SOAPAction": "CreateBlurring"
},
"httpHost": "localhost",
"idCardAttributes": {
"medcom:CareProviderID": "33257872",
"medcom:CareProviderName": "Sundhedsdatastyrelsen",
"medcom:ITSystemName": "Service Consumer Test",
"medcom:UserAuthorizationCode": "6QF17",
"medcom:UserRole": "7170",
"sosi:AuthenticationLevel": "4",
"sosi:IDCardID": "SIjvZBkfZ1yAWSpYFcLpvw==",
"sosi:IDCardType": "user",
"sosi:IDCardVersion": "1.0.1"
},
"method": "POST",
"path": "/idsas/20230601/service",
"query": "",
"port": 8080,
"protocol": "http",
"reqSize": 7204,
"resSize": 211,
"soapHeaders": {
"FlowID": "72111931-fe3b-4956-bea3-20e8c5be9ce0",
"Issuer": "TEST1-NSP-STS",
"MessageID": "76315a15-0fb2-4df7-9e3e-53a3b28fb700",
"NameID": "urn:uuid:46559bb9-d720-48b7-b9bd-c280915768d0"
},
"threadId": "default task-1",
"time": "2023-06-12T13:42:22.968+02:00",
"stats": {
"handlerDuration": 583,
"RequestContentDuration": 41,
"ResponseContentDuration": 0,
"SecurityProtocolRequestDuration": 368,
"SecurityProtocolResponseDuration": 0,
"bufferAllocated": true,
"usedBuffers": 1,
"activeBuffersInPool": 1,
"idleBuffersInPool": 0
}
}
} |
Whitelisting af anvendere
De enkelte anvenderes ID skal whitelistes til at bruge IDSAS. Et ID vil typisk være et CVR.
...
Oprettelse/fornyelse af salt sker via et HTTP GET kald til <serverurl>/idsas-operations/renew-salt
Dette kald skal laves for at oprette det første salt, og efterfølgende for at forny saltet, når der er behov.
Baggrundsjobs
Overvågning af baggrundsjobs
Der findes et status og et alarm-endpoint for hver baggrundsjob. De har følgende url'er:
- <serverurl>/idsas-operations/cleanup-blurrings/status
- <serverurl>/idsas-operations/cleanup-blurrings/alarm
- <serverurl>/idsas-operations/cleanup-blurrings-deceased/status
- <serverurl>/idsas-operations/cleanup-blurrings-deceased/alarm
De to status-endpoints kan svare følgende
- Http-kode 200 og Database: OK
- Http-kode 500 og Database: Unavailable
De to alarm-endpoints er som udgangspunkt tomme og returnerer 200, men kan give en alarm-besked og status 500, hvis jobbet er i problemer.
Oprydningsjob af gamle sløringer
Oprydningsjobbet startes via et HTTP GET kald til <serverurl>/idsas-operations/cleanup-blurrings
Alarm-endpointet er som udgangspunkt tom og returnerer status 200, med mindre noget er gået galt. Status-siden rapporterer om komp
Jobbet kaldes for at påbegynde en oprydning af inaktive sløringer, og vil slette alle registrerede sløringer, som har være inaktive i mindst 5 år.
Jobbet køres i iterationer af en konfigureret størrelse, og terminerer enten når der ikke er flere inaktive sløringer der skal slettes, eller når jobbet har kørt i en konfigureret varighed.
Det vil fremgå af servicens overvågningsside om oprydningen blev færdig:
| Blurring Cleanup Job Status | NOT_STARTED, NOT_FINISHED, FINISHED |
Oprydningsjob af sløringer for afdøde personer
Oprydningsjobbet startes via et HTTP GET kald til <serverurl>/idsas-operations/cleanup-blurrings-deceased
Jobbet kaldes for at påbegynde en oprydning af sløringer for afdøde personer, og vil slette alle registrerede sløringer 1 år efter personerne er afgået ved døden.
Jobbet køres i iterationer af en konfigureret størrelse, og terminerer enten når der ikke er flere sløringer for afdøde der skal slettes, eller når jobbet har kørt i en konfigureret varighed.
Det vil fremgå af servicens overvågningsside om oprydningen blev færdig:
| Blurring Cleanup Deceased Job Status | NOT_STARTED, NOT_FINISHED, FINISHED |
Aktivering af Kafka-consumer
Jobbet startes via et HTTP GET kald til <serverurl>/idsas-operations/kafka-consume
Jobbet kaldes for at påbegynde læsning af beskeder fra Kafka-køen, og vil persistere de ændringer, der modtages.
Jobbet læser hvad der er tilgængeligt i køen med den angivne timeout (se konfigurationen), og committer nyt offset efter succesfuld persistering til databasen.
Det vil fremgå af servicens overvågningsside om jobbet kørende, er kørt færdigt eller om der er sket fejl:
| Kafka Consumer Job Status | NOT_STARTED, RUNNING, FINISHED, ERROR |
...