Version | Dato | Ansvarlig | Beskrivelse |
| 1 | 6.7.2018 | KSR | Opdateret på baggrund af Fuldmagtsprojektet |
| 2 | 6.7.2018 | KSR | Opdateret med information om JWT support |
| 2 | 7.7.2019 | JPE | Opdateret i forhold til containerization af STS. |
Dette dokument indeholder en vejledning til driften af SOSI-STS
Følgende er en oversigt over STS snitflader og kravene til adgang til disse.
Begreber
| Begreb | Forklaring |
|---|---|
| Anvendersystem | Det IT-system som anvender en STS snitflade |
| Bruger | Den bruger som via et klient IT-system anvender STS |
| Trust | Hvem stoler vi på som signerende part på en indgående billet. |
| Modtager | Hvilke systemer kan anvende den billet der udstedes af STS. |
Disse begreber benyttes i snitfladerne nedenfor.
| Snitflade | Anvendersystem | Bruger | Trust | Modtager |
|---|---|---|---|---|
| DGWS | ||||
/sts/services/SecurityTokenService /sts/services/NewSecurityTokenService | Alle som har netværksmæssig adgang | System eller medarbejder | Indgående id-kort skal være signeret af "brugeren selv". | Alle DGWS-services |
| Medarbejderomveksling | ||||
| /sts/services/Sosi2OIOSaml | Alle som har netværksmæssig adgang | Alle medarbejdere | Id-kort skal være signeret af STS (udstedt af /NewSecurityTokenService) | Modtager-system skal være konfigureret (i tabellen iboConfig). |
| /sts/services/OIOSaml2Sosi | Alle som har netværksmæssig adgang. Hele SOAP besked skal være signeret med et vilkårligt OCES2-certifikat. | Alle medarbejdere | OIOSaml assertion skal være signeret af trusted part (i test-new-nemLogin-idp.keystore). I praksis NemLog-In | Alle DGWS-services |
| /sts/services/BST2SOSI | Alle som har netværksmæssig adgang | Alle medarbejdere | Bootstrap token skal være signeret af trusted part (konfigureret i database tabellen sts_audconf.trustedIdpConfiguration). Lokal IdP, SEB eller NemLog-in | Alle DGWS-services |
| Borgeromveksling | ||||
| /sts/services/Bst2Idws | Offentlig nøgle for anvender-system skal være WL (i tabellen audienceConfiguration). Dele af SOAP besked skal være signeret med denne nøgle. | Alle borgere | Bootstrap token skal være signeret af trusted part (konfigureret i database tabellen sts_audconf.trustedIdpCitizenConfiguration). I praksis NemLog-In eller SEB | Modtager-system skal være konfigureret (i tabellen audienceConfiguration). |
| /sts/services/JWTIdws | Offentlig nøgle for anvender-system skal være WL (i tabellen audienceConfiguration). Dele af SOAP besked skal være signeret med denne nøgle. | Alle borgere | JWT skal være signeret af trusted part (i test-jwt-idp-trust.jks). kid skal pege på det rigtige alias i denne. Issuer skal være konfigureret i services.xml | Modtager-system skal være konfigureret (i tabellen audienceConfiguration). JWT suport skal være aktiveret (i tabellen audienceConfiguration) |
| /sts/services/JWT2OIOSaml | Offentlig nøgle for anvender-system skal være WL (i tabellen audienceConfiguration). Dele af SOAP besked skal være signeret med denne nøgle. | Alle borgere | JWT skal være signeret af trusted part (i test-jwt-idp-trust.jks). kid skal pege på det rigtige alias i denne. Issuer skal være konfigureret i services.xml | Modtager-system skal være konfigureret (i tabellen audienceConfiguration). JWT suport skal være aktiveret (i tabellen audienceConfiguration) |
Der benyttes et antal java keystores i løsningen. Disse er typisk placerede i folderen /pack/sts Disse beskrives nedenfor.
| Navn | Kort beskrivelse | Kommentarer |
|---|---|---|
| teststs-1.keystore | STS keystore | Fil baseret keystore der indeholder STS eget certifikat. Benyttes kun i test-miljøer uden LUNA integration |
| testtdc.keystore | Truststore for Digst services. | Truststore i forhold til PID/CVR-RID services. Benyttes i NSP-miljøer ikke fra wildfly, men er opsat i Traffic-manager i stedet. I lokale testmiljøer benyttes den i stedet fra wildfly |
| nsp-test-rid.jks | Keystore i forhold til backend services. | Benyttes til at identificere os (STS) i forhold til backend services som PID, CVR-RID og fuldmagt. Benyttes dels fra Traffic-manager (PID, CVR-RID), dels fra NSP (er opsat via global system-property af hensyn til fuldmagt). |
| test-new-nemLogin-idp.keystore | Truststore til NBO og borger billetomveksling | Indeholder de idp'er (primært nemlogin) vi stoler på som udstedere af de billetter vi omveksler. |
| test-jwt-idp-trust.jks | Truststore til JWT billetomveksling | Indeholder de idp'er (primært nemlogin) vi stoler på som udstedere af de billetter vi omveksler. STS-2.5.3 |
Konfigurationen findes i et java keystore (pt. placeret som /pack/sts/test-new-nemLogin-idp.keystore ). Dette indeholder de certifikater vi stoler på.
Der er ingen krav til hvilke alias'er disse certifikater befinder sig under.
Der er opsat trust af NemLog-in, samt evt. et eller flere yderligere certifikater til interne testformål. Det enkelte certifikat valideres i forbindelse med at det forsøges anvendt.
Fra sts 2.5.3 indgår monitorering af certifikaterne i monitorerings URL'en /sts/checkstatus.
Konfigurationen findes i et java keystore (pt. placeret som /pack/sts/test-jwt-idp-trust.jks ). Dette indeholder de certifikater vi stoler på.
Status på de indeholdte certifikater kan følges på monitorerings-urlen /sts/checkstatus. Enkelte certifikater er dog frasorterede i test, idet disse udelukkende er med for at kunne teste fejlscenarier.
Der er strikse krav til hvilke alias'er disse certifikater befinder sig under.
Der er i første omgang opsat trust af et par certifikater til interne testformål. Det enkelte certifikat valideres i forbindelse med at det forsøges anvendt.
Samme procedure som ved oprettelse. Det nye certifikat placeres under relevante kid (=alias) ved siden af det gamle. Det vil typisk ikke være grund til at rette issuer.
Det gamle kan efterfølgende fjernes, når det ikke længere benyttes.
For hvert audience, skal følgende konfigureres i databasen i tabellen sts_audconf.iboConfig; disse er:
| Felt | Beskrivelse | Påkrævet |
|---|---|---|
| audience | identifikation af modtagersystemet som en URI, der skal være på normalform. | Ja |
| publicKey | den offentlige nøgle som anvendes til kryptering af den omvekslede token. Bemærk at indholdet er tilgivende overfor line-breaks og whitespaces, så der kan formateres valgfrit. | Ja |
| recipientURL | den URL hvor modtagersystemet kan nåes på. | Ja |
| includeBST | om ID-kort/bootstrap token skal inkluderes i den svarede assertion. (ja/nej) | Ja |
| deliveryNotOnOrAfterOffset | offset i tid fra omvekslingstidspunkt, der bruges til opsætning af gyldighed af udstede assertion. | Ja |
| notBeforeOffset | offset i tid fra omvekslingstidspunkt, der bruges til opsætning af gyldighed af udstede assertion. | Ja |
| notOnOrAfterOffset | offset i tid fra omvekslingstidspunkt, der bruges til opsætning af gyldighed af udstede assertion. | Ja |
| idCardMaxAgeMins | maksimal alder på id-kortet | Nej (default er 1440 min) |
Ovenstående tabel skal kun opdateres hvis servicen skal benyttes for et audience, der ikke allerede er konfigureret. I så fald, tilføjes en ny række i tabellen for det nye audience.
Trust til eksterne idp'er er sat op i test-new-nemLogin-idp.keystore. Se afsnittet om Java keystores.
For visse idp'er (nemlogin) stoler vi på det cpr-nummer de medsender i stedet for at validere dette. Dette er opsat i filen /pack/wildfly8/standalone/configuration/services.xml på bean nboConfiguration. Nedenstående viser aktuel indstilling for produktion:
<property name="cprTrustCertificates">
<list>
<value>CVR:34051178-UID:77371184</value> <!-- nemlogin prod -->
</list>
</property> |
Hvis der skal tilføjes trust til en ny idp, skal det opdateres i test-new-nemLogin-idp.keystore, som beskrevet i afsnittet om Java keystores.
Evt. kan property cprTrustCertificates opdateres (nævnt ovenfor).
Omveksling fra BST token til SOSI id-kort kræver konfiguration for hver issuer i databasen i tabellen sts_audconf.trustedIdpConfiguration:
| Felt | Beskrivelse |
|---|---|
| issuer | Identifikation på udstederen af bootstraptokens |
| attribute | Attribut navn |
| attribute_value | Attribut værdi |
| comment | Valgfri kommentar - specielt brugbart til whitelist indgange uden identifikation af organisationen |
Gyldige attributter i tabellen er:
| atribute | Beskrivelse |
|---|---|
| encryptionKey.xxx | Eventuel anvendt krypteringsnøgle til token (en issuer kan have flere krypteringsnøgler med forskellige xxx navne). Suffikset er ligegyldigt og tjener alene til støtte for den som kigger på konfigurationen. |
| tokenProfile | Anvendt tokenprofil. OIOH3BST (lokal IdP udstedt), OIOH2BST (SEB udstedt) eller OIO3BST (NemLog-in3 STS udstedt). |
| validateHOK | Angivelse af om holder-of-key (HoK) validering af requests skal udføres (true, false) |
| certificate.xxx | Angiver SubjectSerialNumber (ssn) for et certifikat der har mulighed for at benytte servicen. Dette certifikat benyttes af anvender til at signere hele beskeden. Sættes issuer til "*" vil certifikatet være gyldigt for alle issuers. Der kan være flere certifikater pr. issuer, hvilket blot betyder at flere anvendere kan tilgå det. Disse skal blot have forskellige xxx navne. Suffikset er ligegyldigt og tjener alene til støtte for den som kigger på konfigurationen. |
| signingKey.xxx | Nøgle til trusted certifikat til signering af BST tokenet (en issuer kan have flere trusted certifikater med forskellige xxx navne). |
I services.xml findes en bean med id "BST2SOSIRequestHandler". Her kan specificeres om whitlist-checks skal være slået til eller fra, vha property "whitelistValidation":
<property name="whitelistValidation" value="false" /> |
Er der tale om en ny issuer, skal der tilføjes rækker til ovenfor nævnte tabel for hver attribut.
Er issuer allerede i tabellen, skal der oprettes:
Ved udstedelse af id-kort, enten på baggrund af selv-signeret id-kort eller ved omveksling af NemLog-in token, er det muligt at anvende nationale roller. De gyldige roller opsættes i tabellen sts_audconf.roleDefinitions.
Nationale roller vil optræde i id-kortet som en rolle på formen urn:dk:healthcare:national-federation-role:code:40001:value:Laegesekretaer
Følgende felter er relevante
| Felt | Beskrivelse |
|---|---|
| source | Kan benyttes til at identificere hvor de konkrete roller ligger. Pt. er eneste benyttede værdi 'NationalFederation' |
| externalName | Det navn hvorunder rollen optræder i den eksterne kilde, f.eks. 'nspLaegesekretaer' |
| code | Den kode der indgår i id-kortet, f.eks. 40001 |
| value | Den tekst-værdi der indgår i id-kortet, f.eks. Laegesekretaer |
Konfiguration i database er altid den gældende — det er ikke nødvendigt at genstarte før ændringer træder i kraft - der kan dog være op til 10 minutters forsinkelse.
Eksempel-SQL:
use sts_audconf;
insert into roleDefinitions (source, externalName, code, value) values ('NationalFederation', 'nspPlejeAssR3', '41003', 'PlejeAssR3'); |
Nationale roller som beskrevet ovenfor valideres som udgangspunkt mod de roller der fremfindes i SEB. Det er dog muligt at tillade enkelte udvalgte cvr-numre (f.eks. regioner) at angive roller i id-kortet uden at få disse valideret via SEB. Dette styres via tabellen sts_audconf.trustedCvr.
| Felt | Beskrivelse |
|---|---|
| cvr | Et cvr nummer der tillades adgang uden validering af nationale roller. |
| endpoint | Det endpoint hvortil funktionaliteten kan benyttes. Mulige værdier er 'STS' (svarende til SecurityTokenService) og 'NBO' (svarende til OIOSaml2Sosi) |
Af sikkerhedsmæssige årsager anbefales funktionaliteten pt kun benyttes for 'STS'.
Omveksling fra Bootstrap token til identitytoken (også tidligere kaldet webapotek løsning) benyttes til at veksle et Bootstraptoken udstedet af NemLog-in på vegne af en borger, til et identitytoken, der kan benyttes til login i FMK-online (og senere formentlig også MinLog2 og Fælles stamkort).
Database tabellen sts_audconf.trustedIdpCitizenConfiguration benyttes til konfiguration for input bootstraptokens. Tabellen er på samme form som sts_audconf.trustedIdpConfiguration (se BST2SOSI):
Gyldige attributter i tabellen er:
| atribute | Beskrivelse |
|---|---|
| encryptionKey.xxx | Eventuel anvendt krypteringsnøgle til token (en issuer kan have flere krypteringsnøgler med forskellige xxx navne). Suffikset er ligegyldigt og tjener alene til støtte for den som kigger på konfigurationen. |
| tokenProfile | Anvendt tokenprofil. OIO2BST_CITIZEN (SEB udstedt), OIO3BST_CITIZEN (NemLog-in3 STS udstedt) eller OIO2BST_LEGACY (NemLog-in2 udstedt). |
| signingKey.xxx | Angiver trusted certifikater til signering af BST tokenet (en issuer kan have flere trusted certifikater med forskellige xxx navne). |
| audience | Angiver gyldigt audience for dette token. |
Herudover benyttes tabellen sts_audconf.audienceConfiguration til konfiguration pr. audience.
Konfigurationen består af et antal indgange på "map-format", audience, attribute, attribute_value, comment. For et givet audience (f.eks. https://fmk) kan der være følgende indgange
| atribute | Beskrivelse |
|---|---|
| lifetime | Angiver gyldighed af det udstedte token, f.eks. 3600 (s). Tilstedeværelsen af denne "aktiverer" det givne audience |
| certificate.xxx | Angiver SubjectSerialNumber (ssn) for et certifikat (typisk FOCES) der har mulighed for at benytte servicen. I praksis beder vi om det offentlige certifikat og henter oplysningen ud herfra. Dette certifikat benyttes af anvender til at signere hele beskeden (beskeden har så bl.a. en Assertion, typisk signeret af NemLog-in). Der kan (og vil) være flere certifikater pr. audience, hvilket blot betyder at flere anvendere kan tilgå det. Disse skal blot have forskellige xxx navne. Suffikset er ligegyldigt og tjener alene til støtte for den som kigger på konfigurationen. |
Der findes pt. i produktion kun et audience (https://fmk). Herudover yderligere et antal audiences i test, til interne eller eksterne testformål.
Dette audience kommer i spil, idet anvendere af borger-billetomvekslingen angiver, hvilket audience de ønsker billetten udstedt til.
Bemærk: Kombinationen af audience og attribut skal være unik, ellers vil "duplikater" blive ignoreret.
Er den angivne issuer endnu ikke konfigureret, skal trustedIdpCitizenConfiguration tabellen opdateres med attributter for denne.
Er issuer allerede i trustedIdpCitizenConfiguration tabellen skal der oprettes:
Er det angivne audience endnu ikke konfigureret, skal audienceConfiguration tabellen opdateres med attributter for denne.
Er audience allerede i audienceConfiguration tabellen, skal der oprettes en ny certificate.xxx attribut med ssn for anvendercertifikatet.
Tilsvarende Bst2Idws findes en omveksling fra JSON web token til identity tokens ligeledes målrettet mod borgere.
Trust til eksterne idp'er er sat op i test-jwt-idp-trust.jks. Se afsnittet om Java keystores.
Derudover ligger kendte issuers i en property på jwt2IdwsRequestHandler i services.xml:
<property name="issuerStrategies">
<util:map>
<entry key="http://sts-tester" value-ref="keyCloak"/>
</util:map>
</property> |
Ligesom for Bst2Idws kræves konfiguration i database tabellen sts_audconf.audienceConfiguration. Dog med en ekstra attribut.
| atribute | Beskrivelse |
|---|---|
| lifetime | Angiver gyldighed af det udstedte token, f.eks. 3600 (s). Tilstedeværelsen af denne "aktiverer" det givne audience |
| certificate.xxx | Angiver SubjectSerialNumber (ssn) for et certifikat (typisk FOCES) der har mulighed for at benytte servicen. I praksis beder vi om det offentlige certifikat og henter oplysningen ud herfra. Dette certifikat benyttes af anvender til at signere hele beskeden (beskeden har så bl.a. en Assertion, typisk signeret af NemLog-in). Der kan (og vil) være flere certifikater pr. audience, hvilket blot betyder at flere anvendere kan tilgå det. Disse skal blot have forskellige xxx navne. Suffikset er ligegyldigt og tjener alene til støtte for den som kigger på konfigurationen. |
| jwtScope | Aktiverer JWT (Json web token) support for dette audience. Omveksling kan kun foretages hvis det indgående JWT indeholder det pågældende jwtScope. Værdien aftales ved oprettelse. |
Er den angivne issuer endnu ikke konfigureret, skal test-jwt-idp-trust.jks opdateres, som beskrevet i afsnittet om Java keystores. Derudover skal property issuerStrategies opdateres i services.xml med den nye issuer (nævnt ovenfor).
Er det angivne audience endnu ikke konfigureret, skal audienceConfiguration tabellen opdateres med attributter for denne.
Er audience allerede i audienceConfiguration tabellen, skal der oprettes en ny certificate.xxx attribut med ssn for anvendercertifikatet. Anvender skal kende det eksisterende jwtScope.
Ligesom for JWT2Idws, er trust til eksterne idp'er sat op i test-jwt-idp-trust.jks, og kendte issuers ligger i property issuerStrategies på sboRequestHandler i services.xml.
Audience konfiguration ligger i databasen i tabellen sts_audconf.audienceConfiguration ligesom Bst2Idws og JWT2Idws. Dog med lidt flere attributter:
| atributeName | Beskrivelse |
|---|---|
| lifetime | Angiver gyldighed af det udstedte token, f.eks. 3600 (s). Tilstedeværelsen af denne "aktiverer" det givne audience |
| certificate.xxx | Angiver SubjectSerialNumber (ssn) for et certifikat (typisk FOCES) der har mulighed for at benytte servicen. I praksis beder vi om det offentlige certifikat og henter oplysningen ud herfra. Dette certifikat benyttes af anvender til at signere hele beskeden (beskeden har så bl.a. en Assertion, typisk signeret af NemLog-in). Der kan (og vil) være flere certifikater pr. audience, hvilket blot betyder at flere anvendere kan tilgå det. Disse skal blot have forskellige xxx navne. Suffikset er ligegyldigt og tjener alene til støtte for den som kigger på konfigurationen. |
| jwtScope | Aktiverer JWT (Json web token) support for dette audience. Omveksling kan kun foretages hvis det indgående JWT indeholder det pågældende jwtScope. Værdien aftales ved oprettelse. |
| publicKey | Den offentlige nøgle som anvendes til kryptering af den omvekslede token. Bemærk at indholdet er tilgivende overfor line-breaks og whitespaces, så der kan formateres valgfrit. |
| recipientURL | Den URL hvor modtagersystemet kan nåes på. |
| includeBST | Om token skal inkluderes i den svarede assertion. (ja/nej) |
Er den angivne issuer endnu ikke konfigureret, skal test-jwt-idp-trust.jks opdateres, som beskrevet i afsnittet om Java keystores. Derudover skal property issuerStrategies opdateres i services.xml med den nye issuer (nævnt ovenfor).
Er det angivne audience endnu ikke konfigureret, skal audienceConfiguration tabellen opdateres med attributter for denne.
Er audience allerede i audienceConfiguration tabellen, skal der oprettes en ny certificate.xxx attribut med ssn for anvendercertifikatet. Anvender skal kende det eksisterende jwtScope.
Såfremt der er tale om en simpel fornyelse hos anvender systemet, hvor CVR-FID ikke ændres, skal der ikke foretages noget.
Såfremt der er tale om helt nye nøgler, indsættes den nye ved siden af den gamle. Efterfølgende kan den gamle fjernes hvis/når den ikke længere benyttes.
Følgende tabel viser STS’ens sla logpunkter samt tilhørende navn. De enkelte logpunkter beskrives i detaljer i det følgende.
| ID | Navn | Beskrivelse |
|---|---|---|
| 200 | AbstractStsRequestHandler.request | Alle forespørgelser, der modtages rammer dette logpunkt. |
| 210 | SecurityTokenService.issueIdCard | Når et IDKort signeres, vil dette logpunkt blive ramt. |
| 220 | WsOcesCvrRidService.findRelatedCpr | Ved opslag til CVR-RID tjenesten vil dette logpunkt blive ramt. |
| 221 | WsOcesPidService.isRelated | Ved opslag til PID tjenesten vil dette logpunkt blive ramt. |
| 222 | ProcurationWebService.getProcurationPrivileges | Ved opslag til Fuldmagt tjenesten vil dette logpunkt blive ramt. |
| 250 | NboRequestHandler.serialize | Ved omveksling mellem OIOSaml tokens (NemLogin tokens) til SOSI |
| 260 | SignatureProvider.sign | Dette logpunkt kaldes når STS signerer enten et id-kort eller en IDWS billet. |
| 270 | NboIdwsRequestHandler.convert | Dette logpunkt ved omveksling af andet token til et borger-IDWS-token |
| 280 | BST2SOSIRequestHandler.convert | Ved omveksling fra OIO BST token til SOSI idkort. |
Servicen kan genstartes ved at genstarte den docker container, som servicen den kører i.