Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Navitabs
rootSeal.Java 3 .0 Dokumentation- Leverancebeskrivelse
includeroottrue



Table of Contents

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:

  • Forudsætninger for at kunne anvende Seal.Java
  • Hvad kan Anvendelser af Seal.Java anvendes til?
  • Kom godt Hvordan kommer man som anvender i gang med at bruge anvende Seal.Java?
  • Give en oversigt over de mest centrale Oversigt over klasser og metoder.
  • Forskelle på Seal.Java 2 og Seal.Java 3.

Der findes konkrete kodeeksempler i undersiderne til dette dokument, så man kan se hvordan Seal.Java kan anvendesDe 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.

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 Et grundlæggende kendskab til følgende er en forudsætning for at kunne anvende Seal.Java:

  • Java udvikling 
  • XML
  • SOAP
  • SAML
  • WS-Security
  • X.
  • 509 OCES
  • 509
  • OCES3
  • Sikkerhedsbilletter: Den Gode WebService (DGWS), SAML2 og JSON Webtokens (JWT)

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

...

Anvendelser af Seal.Java

...

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

...

  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å.

...

De tre måder at anvende Seal.Java

...

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. 

...

på kan illustreres på følgende måde:

Gliffy Diagram
macroIdd262981d-9f9d-41ba-a52f-dfae3ba30b31
displayNameSeal.Java anvendelser
nameSeal.Java anvendelser
pagePin3


Kom godt i gang med at anvende Seal.Java

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 Hvis man vil anvende Seal.Java , så skal man have følgende installeret:

...

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.

...

Distribution

De binære pakker er tilgængelige igennem NSPOPs Nexus (pakke manager):

...

Her findes også SNAPSHOT udgaver, som kan bruges under udvikling af funktionalitet, der skal testes inden release.

Man anvender Seal.Java fra kan anvendesfra en komponent ved at tilføje følgende Maven dependency:

Code Block
<dependency>
	<groupId>dk.sosi.seal</groupId>
	<artifactId>seal</artifactId>
	<version>3.x.x</version>
</dependency>

Kodestruktur

Modelobjekter

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 afpejler afspejler eksempelvis et request, response eller en sikkerhedsbillet (OIO SAML assertion eller ID-kort).

...

I det følgende vises et pseudokode-eksempel på hvordan et request der indeholder et bootstrap Token opbygges:man anvender Seal.Java til at omveksle en borgers Bootstrap token til en NSP IDWS billet.

Code Block
// Det indkomne XML dokument "stsRequestXmlDocument" er en tekststreng 

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


// Opbyg bootstrap token
OIOSAMLAssertionBuilder oiosamlAssertionBuilderBootstrap token deserialiseres til model objekt
OIOBootstrapToIdentityTokenRequest stsRequest = factory.createOIOSAMLAssertionBuildercreateOIOBootstrapToIdentityTokenRequestModelBuilder();
oiosamlAssertionBuilder.setSigningVaultbuild(signingVaultstsRequestXmlDocument);
...
OIOSAMLAssertion oiosamlAssertion
// SAML Assertion hentes ud
OIOBSTSAMLAssertion assertion = oiosamlAssertionBuilderstsRequest.buildgetOIOBSTSAMLAssertion();


// Opbyg STS request (serialisering)
OIOSAMLAssertionToIDCardRequestDOMBuilder domBuilder NSP IDWS billetten opbygges ud fra informationerne i SAML Assertion
final CitizenIdentityTokenBuilder identityTokenBuilder = factory.createOIOSAMLAssertionToIDCardRequestDOMBuilder(createCitizenIdentityTokenBuilder();

identityTokenBuilder.setSubjectNameID(assertion.getSubjectNameID());
domBuilder.setSigningVault(signingVaultidentityTokenBuilder.setSubjectNameIDFormat(assertion.getSubjectNameIDFormat());
identityTokenBuilder.setCprNumberAttribute(assertion.getCpr());
identityTokenBuilder.
Document consumerStsRequestDocument = domBuilder.build(setHolderOfKeyCertificate(holderOfKeyCertificate);
identityTokenBuilder.setSigningVault(signingVault);
...

// STS modtager request (deserialisering)
OIOBootstrapToIdentityTokenRequest stsRequest = factory.createOIOBootstrapToIdentityTokenRequestModelBuilder().build(consumerStsRequestDocumentOpbyg 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.

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 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:

Code Block
CredentialVault signingVault = new ClasspathCredentialVault(null, "Filnavn på PKCS#12 Virksomhedscertifikat", "Kodeord til Virksomhedscertifikat");


Oversigt over klasser og metoder

Service Consumer

I den følgende tabel vises en oversigt over de omvekslinger Seal.Java understøtter når man vil benytte den som 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 vil man også kunne finde findes konkrete kodeeksempler der viser hvordan den anvendesSeal.Java anvendes for denne omveksling.


FunktionalitetSTS omvekslingFactory klasseLinkBemærkning
DGWS

DGWS ID kort (system og bruger)

/sts/services/NewSecurityTokenServiceSOSIFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (Consumer) - DGWS ID kort (system
og bruger
/ medarbejder)
DGWS ID kort Legacy udgave/sts/services/SecurityTokenServiceSOSIFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (Consumer) - DGWS ID kort Legacy udgaveBør ikke anvendes
Medarbejderomveksling
DGWS id-kort til OIO-Saml Token/sts/services/Sosi2OIOSamlOIOSAMLFactorySeal.Java 3 - Guide til anvendere (Consumer) - DGWS id-kort til OIO SAML Token
OIO-Saml Token til DGWS id-kort/sts/services/OIOSaml2SosiOIOSAMLFactorySeal.Java 3 - Guide til anvendere (Consumer) - OIO-Saml Token til DGWS id-kortDenne udgår på sigt.
Bootstrap Token til DGWS id-kort/sts/services/BST2SOSIOIOSAMLFactorySeal.Java 3 - Guide til anvendere (Consumer) - Bootstrap Token til DGWS id-kort
Borgeromveksling
Bootstrap Token til OIO-Idws Token/sts/services/Bst2IdwsOIOSAMLFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (Consumer) - Bootstrap Token til OIO-Idws Token
JSON Web Token (JTP-H) profil til OIO-Idws Token/sts/services/JWT2IdwsOIOSAMLFactorySeal.Java 3 - Guide til anvendere (Consumer) - JSON Web token (JWT) til OIO IDWS tokenJTP-H profil bør anvendes.
JSON Web Token til OIO-Saml Token/sts/services/JWT2OIOSaml OIOSAMLFactorySeal.Java 3 - Guide til anvendere (Consumer) - JSON Web Token til OIO-Saml TokenDenne udgår på sigt.
eHDSI
Dkncp Boostrap token til eHDSI Identity token/sts/services/DKNCPBST2EHDSIIdwsEHDSIFactorySeal.Java 3 - Guide til anvendere (Consumer) - eHDSI Boostrap token til eHDSI Identity token

Security Token Service

I den følgende tabel vises en oversigt over de omvekslinger Seal.Java understøtter når man vil benytte den som en del 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 vil man også kunne finde findes konkrete kodeeksempler der viser hvordan den anvendesSeal.Java anvendes for denne omveksling.


FunktionalitetSTS omvekslingFactory klasseLinkBemærkning
DGWS

DGWS ID kort (system og bruger)

/sts/services/NewSecurityTokenServiceSOSIFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (STS) - DGWS ID kort (system og bruger)
DGWS ID kort Legacy udgave/sts/services/SecurityTokenServiceSOSIFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (STS) - DGWS ID kort Legacy udgaveBør ikke anvendes
Medarbejderomveksling
DGWS id-kort til OIO-Saml Token/sts/services/Sosi2OIOSamlOIOSAMLFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (STS) - DGWS id-kort til OIO-Saml Token
OIO-Saml Token til DGWS id-kort/sts/services/OIOSaml2SosiOIOSAMLFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (STS) - OIO-Saml Token til DGWS id-kortDenne udgår på sigt.
Bootstrap Token til DGWS id-kort/sts/services/BST2SOSIOIOSAMLFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (STS) - Bootstrap Token til DGWS id-kort
Borgeromveksling
Bootstrap Token til OIO-Idws Token/sts/services/Bst2IdwsOIOSAMLFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (STS) - Bootstrap Token til OIO-Idws Token
JSON Web Token (JTP-H) profil til OIO-Idws Token/sts/services/JWT2IdwsOIOSAMLFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (STS) - JSON Web token (JWT) til OIO IDWS tokenJTP-H profil bør anvendes.
JSON Web Token til OIO-Saml Token/sts/services/JWT2OIOSaml OIOSAMLFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (STS) - JSON Web Token til OIO-Saml TokenDenne udgår på sigt.
eHDSI
Dkncp Boostrap token til eHDSI Identity token/sts/services/DKNCPBST2EHDSIIdwsEHDSIFactorySeal.Java
Anvenderguide
3 - Guide til anvendere (STS) - Dkncp Boostrap token til eHDSI Identity token

Service Provider

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.



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

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

Seal.Java 3

Den oprindelige nuværende udgave af Seal.Java er baseret på Java 8 og den er afhængig af en række eksterne biblioteker kodebiblioteker til bla. signering , og 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. i XML. Der findes tilsvarende funktionalitet indbygget som standard i Java og hvis man anvender den21, 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.kan fremover undværes.

 Overgang til Seal.Java 3

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

  • Modulet 'demo' er blevet fjernet.
  • Methoden SignatureUtil.getSignedInfoBytes() er udgået, da det ikke er understøttet i JDK'en at beregne digest værdier på denne måde.
  • Der er ikke længere understøttelse for at repræsentere certifikatet som tekst (isAddCertificateAsReference).