Dette dokument henvender sig til anvendere af Seal.Java. Dette dokument giver en mere overordnet introduktion til Seal.Java.
I dette dokument beskrives følgende:
De forskellige måder Seal.Java kan anvendes på er beskrevet i større detalje i undersider til dette dokument. I disse undersider indeholder desuden konkrete kodeeksempler for anvendelse af Seal.Java.
Seal.Java er i modsætning til de øvrige NSP komponenter et kodebibliotek og anvenderne forventes at have andre og mere tekniske forudsætninge.
Et grundlæggende kendskab til følgende er en forudsætning for at kunne anvende Seal.Java:
Der vil være en indledende beskrivelse som ikke forudsætter ovenstående.
Seal.Java anvendes til at sikre, at DGWS og IDWS standarden bliver overholdt.
Seal.Java har følgende tre overordnede anvendelser:
De tre måder at anvende Seal.Java på kan illustreres på følgende måde:
![]()
I dette afsnit gennemgås den praktiske fremgangsmåde til at komme i gang med at anvende Seal.Java i en komponent, samt beskrivelse af kodestrukturen.
For at anvende Seal.Java er det nødvendigt at have kendskab til de factory-klasser og modelobjekter, der findes i Seal.Java
Der er udarbejdet en vejldning der beskriver hvordan Seal.Java bygges og det er således ikke en del af guide til anvendere: Seal.Java 3 - Guide til udviklere.
De binære pakker er tilgængelige igennem NSPOPs Nexus (pakke manager):
https://nexus.nspop.dk/nexus/service/rest/repository/browse/public/dk/sosi/seal/seal/
Her findes også SNAPSHOT udgaver, som kan bruges under udvikling af funktionalitet, der skal testes inden release.
Seal.Java kan anvendesfra en komponent ved at tilføje følgende Maven dependency:
<dependency> <groupId>dk.sosi.seal</groupId> <artifactId>seal</artifactId> <version>3.x.x</version> </dependency> |
Seal.Java arbejder med XML via W3C Document og eksemplerne i anvenderguiden forudsætter dette. De helt centrale byggeblokke i Seal.Java er en række modelobjekter der afspejler eksempelvis et request, response eller en sikkerhedsbillet (OIO SAML assertion eller ID-kort).
Disse modelobjekter konstrueres vha. af en række model-builder klasser og kaldene til disse er samlet i nogle factory-klasser, så der kun er en enkelt indgang pr. omveksling.
Modelobjekterne bliver signeret som en del af opbygningen.
Ud over metoder til konstruktion af modeobjekter, så indeholder factory-klasserne også indgange til følgende:
I det følgende vises et pseudokode-eksempel på hvordan man anvender Seal.Java til at omveksle en borgers Bootstrap token til en NSP IDWS billet.
// Det indkomne XML dokument "stsRequestXmlDocument" er en tekststreng // Brug denne factory OIOSAMLFactory factory = new OIOSAMLFactory(); // Bootstrap token deserialiseres til model objekt OIOBootstrapToIdentityTokenRequest stsRequest = factory.createOIOBootstrapToIdentityTokenRequestModelBuilder().build(stsRequestXmlDocument); // SAML Assertion hentes ud OIOBSTSAMLAssertion assertion = stsRequest.getOIOBSTSAMLAssertion(); // NSP IDWS billetten opbygges ud fra informationerne i SAML Assertion final CitizenIdentityTokenBuilder identityTokenBuilder = factory.createCitizenIdentityTokenBuilder(); identityTokenBuilder.setSubjectNameID(assertion.getSubjectNameID()); identityTokenBuilder.setSubjectNameIDFormat(assertion.getSubjectNameIDFormat()); identityTokenBuilder.setCprNumberAttribute(assertion.getCpr()); identityTokenBuilder.setHolderOfKeyCertificate(holderOfKeyCertificate); identityTokenBuilder.setSigningVault(signingVault); ... // Opbyg samlet response AbstractOIOToIdentityTokenResponseDOMBuilder<?> responseBuilder = new OIOBootstrapToIdentityTokenResponseDOMBuilder(); responseBuilder.setIdentityToken(identityToken); responseBuilder.setSigningVault(signingVault); Document response = responseBuilder.build(); |
I underdokumenter til anvenderguiden findes der komplette eksempler der vises hele flowet mellem consumer, provider og STS.
Et andet centralt begreb i Seal.Java er CredentialVault, der benyttes til at afkoble brugen af certifikater og keystores. Dermed er det ikke nødvendigt at have kendskab til den underliggende implementation. Det giver mulighed for at udskifte implementering, f.eks. at bruge Java KeyStore, HSM (Hardware Security Module), filbaseret vault eller noget andet.
Eksempel på hvordan en CredentialVault opbygges ud fra en PKCS#12-keystore:
CredentialVault signingVault = new ClasspathCredentialVault(null, "Filnavn på PKCS#12 Virksomhedscertifikat", "Kodeord til Virksomhedscertifikat"); |
I den følgende tabel vises en oversigt over de omvekslinger Seal.Java understøtter når kodebiblioteket anvendes af en Service Consumer.
Omvekslingerne er grupperet efter samme farveskema der er anvendt i dokumentationen for NSP Security Token Service. Se STS - Guide til anvendere.
Ud for de enkelte omvekslinger findes et link til en anvenderguider der specifikt handler om denne omveksling. Her findes konkrete kodeeksempler der viser hvordan Seal.Java anvendes for denne omveksling.
| Funktionalitet | STS omveksling | Factory klasse | Link | Bemærkning |
|---|---|---|---|---|
| DGWS | ||||
DGWS ID kort (system og bruger) | /sts/services/NewSecurityTokenService | SOSIFactory | Seal.Java 3 - Guide til anvendere (Consumer) - DGWS ID kort (system / medarbejder) | |
| DGWS ID kort Legacy udgave | /sts/services/SecurityTokenService | SOSIFactory | Seal.Java 3 - Guide til anvendere (Consumer) - DGWS ID kort Legacy udgave | Bør ikke anvendes |
| Medarbejderomveksling | ||||
| DGWS id-kort til OIO-Saml Token | /sts/services/Sosi2OIOSaml | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (Consumer) - DGWS id-kort til OIO SAML Token | |
| OIO-Saml Token til DGWS id-kort | /sts/services/OIOSaml2Sosi | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (Consumer) - OIO-Saml Token til DGWS id-kort | Denne udgår på sigt. |
| Bootstrap Token til DGWS id-kort | /sts/services/BST2SOSI | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (Consumer) - Bootstrap Token til DGWS id-kort | |
| Borgeromveksling | ||||
| Bootstrap Token til OIO-Idws Token | /sts/services/Bst2Idws | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (Consumer) - Bootstrap Token til OIO-Idws Token | |
| JSON Web Token (JTP-H) profil til OIO-Idws Token | /sts/services/JWT2Idws | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (Consumer) - JSON Web token (JWT) til OIO IDWS token | JTP-H profil bør anvendes. |
| JSON Web Token til OIO-Saml Token | /sts/services/JWT2OIOSaml | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (Consumer) - JSON Web Token til OIO-Saml Token | Denne udgår på sigt. |
| eHDSI | ||||
| Dkncp Boostrap token til eHDSI Identity token | /sts/services/DKNCPBST2EHDSIIdws | EHDSIFactory | Seal.Java 3 - Guide til anvendere (Consumer) - eHDSI Boostrap token til eHDSI Identity token | |
I den følgende tabel vises en oversigt over de omvekslinger Seal.Java understøtter når kodebiblioteket anvendes af en Security Token Service.
Omvekslingerne er grupperet efter samme farveskema der er anvendt i dokumentationen for NSP Security Token Service. Se STS - Guide til anvendere.
Ud for de enkelte omvekslinger findes et link til en anvenderguider der specifikt handler om denne omveksling. Her findes konkrete kodeeksempler der viser hvordan Seal.Java anvendes for denne omveksling.
| Funktionalitet | STS omveksling | Factory klasse | Link | Bemærkning |
|---|---|---|---|---|
| DGWS | ||||
DGWS ID kort (system og bruger) | /sts/services/NewSecurityTokenService | SOSIFactory | Seal.Java 3 - Guide til anvendere (STS) - DGWS ID kort (system og bruger) | |
| DGWS ID kort Legacy udgave | /sts/services/SecurityTokenService | SOSIFactory | Seal.Java 3 - Guide til anvendere (STS) - DGWS ID kort Legacy udgave | Bør ikke anvendes |
| Medarbejderomveksling | ||||
| DGWS id-kort til OIO-Saml Token | /sts/services/Sosi2OIOSaml | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (STS) - DGWS id-kort til OIO-Saml Token | |
| OIO-Saml Token til DGWS id-kort | /sts/services/OIOSaml2Sosi | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (STS) - OIO-Saml Token til DGWS id-kort | Denne udgår på sigt. |
| Bootstrap Token til DGWS id-kort | /sts/services/BST2SOSI | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (STS) - Bootstrap Token til DGWS id-kort | |
| Borgeromveksling | ||||
| Bootstrap Token til OIO-Idws Token | /sts/services/Bst2Idws | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (STS) - Bootstrap Token til OIO-Idws Token | |
| JSON Web Token (JTP-H) profil til OIO-Idws Token | /sts/services/JWT2Idws | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (STS) - JSON Web token (JWT) til OIO IDWS token | JTP-H profil bør anvendes. |
| JSON Web Token til OIO-Saml Token | /sts/services/JWT2OIOSaml | OIOSAMLFactory | Seal.Java 3 - Guide til anvendere (STS) - JSON Web Token til OIO-Saml Token | Denne udgår på sigt. |
| eHDSI | ||||
| Dkncp Boostrap token til eHDSI Identity token | /sts/services/DKNCPBST2EHDSIIdws | EHDSIFactory | Seal.Java 3 - Guide til anvendere (STS) - Dkncp Boostrap token til eHDSI Identity token | |
I den følgende tabel vises en oversigt over de omvekslinger Seal.Java understøtter når kodebiblioteket anvendes af en Service Provider.
Omvekslingerne er grupperet efter samme farveskema der er anvendt i dokumentationen for NSP Security Token Service. Se STS - Guide til anvendere.
Ud for de enkelte omvekslinger findes et link til en anvenderguider der specifikt handler om denne omveksling. Her findes konkrete kodeeksempler der viser hvordan Seal.Java anvendes for denne omveksling.
| Funktionalitet | Factory klasse | Link | Bemærkning |
|---|---|---|---|
| DGWS | SOSIFactory | Seal.Java 3 - Guide til anvendere (Provider) - DGWS (Den Gode Web Service) | |
| IDWS | OIOIDWSFactory | Seal.Java 3 - Guide til anvendere (Provider) - IDWS (OIO Identity Based Web Services) |
Dette afsnit beskriver de funktionelle forskelle på Seal.Java 2.6.x / 2.7.x og Seal.Java 3.0.x.
Den nuværende udgave af Seal.Java er baseret på Java 8 og er afhængig af en række eksterne kodebiblioteker til bla. signering og kryptering i XML. Der findes tilsvarende funktionalitet indbygget som standard i Java 21, så disse ekstern afhængigheder kan fremover undværes.
På følgende punkter er der væsentlige ændringer i forhold til Seal.Java 2: