Indledning

Dette dokument henvender sig til anvendere af Seal.Java. Dette dokument giver en mere overordnet introduktion til Seal.Java og der er nogle undersider der fokuserer på nogle konkreteanvendelser af Seal.Java.

I dette dokument beskrives følgende:

Der findes konkrete kodeeksempler i undersiderne til dette dokument, så man kan se hvordan Seal.Java kan anvendes.

Forudsætninger

Seal.Java er i modsætning til de øvrige NSP komponenter et kodebibliotek og anvenderne forventes at have andre og mere tekniske forudsætninge.

Man bør som minimum have kendskab til følgende for at kunne anvende Seal.Java:

Der vil være en indledende beskrivelse som ikke forudsætter ovenstående.

Hvad kan Seal.Java anvendes til?

Seal.Java anvendes til at sikre, at DGWS og IDWS standarden bliver overholdt.

Seal.Java har følgende tre overordnede anvendelser:

  1. Som Consumer, hvor den benyttes til at opbygge DGWS/IDWS requests.
  2. Som Provider, hvor den benyttes til at modtage DGWS/IDWS requests.
  3. Som Security Token Service, hvor den udsteder et token til en Consumer og som Provider stoler på.

Anvendelse af Seal.Java som Consumer

Dette kan f.eks. være en anvender der vil kalde en NSP service.


Anvendelse af Seal.Java som Provider

Dette kan f.eks. være en NSP Service der kan modtage DGWS/IDWS request der er opbygget af en Consumer.


Anvendelse af Seal.Java som Security Token Service

Kan udstede og validere DGWS/IDWS request til en Consumer. 


Hvordan kommer man igang med at anvende Seal.Java?

Hvis man vil anvende Seal.Java, så skal man have følgende installeret:

Distribution

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.

Man anvender Seal.Java fra 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>

Kodestruktur

Modelobjekter

De helt centrale byggeblokke i Seal.Java er en række modelobjekter der afpejler 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 et request der indeholder et bootstrap Token opbygges:

// Brug denne factory
OIOSAMLFactory factory = new OIOSAMLFactory();


// Opbyg bootstrap token
OIOSAMLAssertionBuilder oiosamlAssertionBuilder = factory.createOIOSAMLAssertionBuilder();
oiosamlAssertionBuilder.setSigningVault(signingVault);
...
OIOSAMLAssertion oiosamlAssertion = oiosamlAssertionBuilder.build();


// Opbyg STS request (serialisering)
OIOSAMLAssertionToIDCardRequestDOMBuilder domBuilder = factory.createOIOSAMLAssertionToIDCardRequestDOMBuilder();
domBuilder.setSigningVault(signingVault);
...
Document consumerStsRequestDocument = domBuilder.build();


// STS modtager request (deserialisering)
OIOBootstrapToIdentityTokenRequest stsRequest = factory.createOIOBootstrapToIdentityTokenRequestModelBuilder().build(consumerStsRequestDocument);

I underdokumenter til anvenderguiden findes der komplette eksempler der vises hele flowet mellem consumer, provider og STS.



Signering

Et andet centralt begreb i Seal.Java er CredentialVault, der benyttes til at afkoble brugen af certifikater og keystores. Dermed behøver man ikke kende 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:



Oversigt over klasser og metoder

Service Consumer

I den følgende tabel vises en oversigt over de centrale metoder der skal benyttes hvis man anvender Seal.Java som Service Consumer.

FunktionalitetFactoryConsumer build STS requestConsumer parse STS response
DGWS
ID kort (system)SOSIFactorycreateNewSecurityTokenRequestdeserializeSecurityTokenResponse
ID kort (bruger)SOSIFactorycreateNewSecurityTokenRequestdeserializeIDCard




















eHDSI
eHDSIEHDSIFactoryDkncpBootstrapSamlAssertionToEhdsiIdwsXuaEmployeeIdentityTokenRequestDOMBuildercreateDkncpBootstrapSamlAssertionToEhdsiIdwsXuaEmployeeIdentityTokenResponseModelBuilder


Security Token Service

I den følgende tabel vises en oversigt over de centrale metoder der skal benyttes hvis man anvender Seal.Java som Security Token Service.


** Kommentar vedr. links til anvenderguide.

FunktionalitetSTS omvekslingLink
DGWS
ID kort (system og bruger) ← Lav denne til et link til specifik anvenderguide/sts/services/NewSecurityTokenService
ID kort Legacy udgave (Skal denne med?)/sts/services/SecurityTokenService
Medarbejderomveksling
DGWS id-kort til OIO-Saml Token/sts/services/Sosi2OIOSaml
OIO-Saml Token til DGWS id-kort (fjernes?)/sts/services/OIOSaml2Sosi
Bootstrap Token til DGWS id-kort/sts/services/BST2SOSI
Borgeromveksling
Bootstrap Token til OIO-Idws Token/sts/services/Bst2Idws
JSON Web Token til OIO-Idws Token (Skal der laves eksempel for denne?)/sts/services/JWT2Idws
JSON Web Token (JTP-H) profil til OIO-Idws Token/sts/services/JWT2Idws
JSON Web Token til OIO-Saml Token (fjernes?)/sts/services/JWT2OIOSaml 
eHDSI
Dkncp Boostrap token til eHDSI Identity token/sts/services/DKNCPBST2EHDSIIdwscreateDkncpBootstrapSamlAssertionToEhdsiIdwsXuaEmployeeIdentityTokenRequestModelBuilder

Service Provider

FunktionalitetFactory






Forskelle på Seal.Java 2 og Seal.Java 3

Dette afsnit beskriver hvad man skal være opmærksom på hvis man anvender Seal.Java 2.6.x eller 2.7.x og vil skifte til Seal.Java 3.0.x

Seal.Java 3

Den oprindelige udgave af Seal.Java er baseret på Java 8 og den er afhængig af en række eksterne biblioteker til bla. signering, kryptering og håndtering af XML. Disse biblioteker er centrale for sikkerheden i Seal.Java og det er en udfordrende opgave at holde dem up-to-date hele tiden. Der findes tilsvarende funktionalitet indbygget som standard i Java og hvis man anvender den, så undgår man disse ekstern afhængigheder. I processen med at skifte til at bruge de indbyggede sikkerhedsbiblioteker blev det besluttet at benytte Java 21 i stedet for Java 8, da NSPs måde at anvende dem på ikke var fuldt understøttet i Java 8.


 Overgang til Seal.Java 3

På følgende punkter er der væsentlige ændringer i forhold til Seal.Java 2: