Skip to content

ks-no/fiks-io-klient-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fiks IO java klient

MIT Licens Maven Central DepShield Badge GitHub last commit GitHub Release Date

Dette er en klient for å bruke Fiks IO i et JVM miljø

Fiks IO er et meldingssystem for offentlig sektor i Norge. Om Fiks IO

Fiks IO er også det underliggende meldingssystemet for Fiks Protokoll meldinger. Les mer om Fiks Protokoll her

Forenkler bruk av Fiks-IO

Denne klienten og tilsvarende klienter for andre språk utgitt av KS forenkler autentisering, kryptering og kommunikasjon med meldinger via Fiks-IO. Fiks-IO forlanger f.eks. noen spesifikke headere i meldingene. Ved å bruke denne klienten blir disse detaljene skjult og forenkler sending og mottak av meldinger gjennom Fiks-IO. Du kan lese mer om Fiks-IO headerene her.

Ta i bruk

Versjoner

Versjon 3.x krever Java 17 eller høyere. Har du ikke mulighet for å bruke det må du holde deg på v. 2.x

Versjon Java baseline Spring Boot versjon Status
3.x Java 17 3.X Aktiv
2.X Java 11 2.X Vedlikehold

Maven

Legg til følgende i POM-filen din:

<dependencies>
   <dependency>
        <groupId>no.ks.fiks</groupId>
        <artifactId>fiks-io-klient-java</artifactId>
        <version>x.x.x</version>
   </dependency>
</dependencies>

Bruk

Oppsett

final FiksIOKonfigurasjon fiksIOKonfigurasjon = FiksIOKonfigurasjon.builder()
                                            // Bygg konfigurasjon - se mer under "Konfigurasjon av klienten"
                                            .build();
final FiksIOKlientFactory fiksIOKlientFactory = new FiksIOKlientFactory(fiksIOKonfigurasjon);
final FiksIOKlient fiksIOKlient = fiksIOKlientFactory.build();
// Lytte på meldinger
fiksIOKlient.newSubscription((motattMelding, svarSender) -> {
                         // Gjør noe med mottatt melding
                     });

// Slå opp konto
final Optional<Konto> fiksIoKonto = fiksIOKlient.lookup(...);


// Sende melding
final SendtMelding sendtMelding = fiksIoKonto.map(konto -> fiksIOKlient.send(...)).orElseThrow(() -> new IllegalStateException("Kunne ikke sende til Fiks IO"));
Oppsett med egen Maskinporten klient

FiksIOKlientFactory bruker Fiks Maskinporten klient som standard, men en kan bruke egen klient for generering av AccessToken utstedt fra maskinporten.

NB! Krever skope "ks:fiks"

// sett din egen maskinportenAccessTokenSupplier
fiksIOKlientFactory.setMaskinportenAccessTokenSupplier(maskinportenAccessTokenSupplier)

Konfigurasjon av klienten

FiksIO klienten er default satt opp med 5 tråder for kryptering. Størrelsen kan overstyres ved behov. For å overstyre må en spesifisere FiksIOKonfigurasjon.executor FiksIO klienten er default satt opp med HttpClient connection pool, med maks 5 requests pr route og 25 totalt. En kan overstyre denne med å konfigurere egen http klient.

NB!! med parallellisering oppnår en ikke raskere prosessering om man kjører med flere enn 5 parallelle tråder pr FiksIO klient, om en ikke samtidig øker størrelse på krypterings og http klient pool

For å konfigurere klienten, trengs en instans av FiksIOKonfigurasjon. Den har en tilhørende builder som kan benyttes til å angi all konfigurasjon. Forkortet eksempel:

FiksIoKonfigurasjon konfigurasjon = FiksIOKonfigurasjon.builder()
    .fiksApiKonfigurasjon(FiksApiKonfigurasjon.builder()
        .host("api.fiks.ks.no")
        .port(443)
        .scheme("https")
        .build())
    .amqpKonfigurasjon(AmqpKonfigurasjon.builder()
        .host("io.fiks.ks.no")
        .port(5671)
        .build())
    .fiksIntegrasjonsKonfigurasjon(FiksIntegrasjonKonfigurasjon.builder()
        .integrasjonId("din integrasjonsid")
        .integrasjonPassord("ditt integrasjonspassord")
        .idPortenKonfigurasjon( createMaskinportenKonfigurasjon() ) // Dette er Maskinporten konfigurasjonen! Se eksempel under.
        .build())
    // Resten av konfigurasjonen...
    .build();

Maskinporten konfigurasjon

IdPortenKonfigurasjon brukes for konfigurasjon av Maskinporten klienten

private static IdPortenKonfigurasjon createMaskinportenPortenKonfigurasjon() {
    return IdPortenKonfigurasjon.builder()
        .accessTokenUri("https://test.maskinporten.no/token")
        .idPortenAudience("https://test.maskinporten.no/")
        .klientId("din klientid")
        .build();
}

For å gjøre det enklere å sette opp standard konfigurasjon for test og prod miljøene, finnes det i tillegg to funksjoner defaultProdConfiguration og defaultTestConfiguration for å lage default konfigurasjon. Påkrevde felter angis som argument, slik:

final FiksIOKonfigurasjon fiksIOKonfigurasjon = FiksIOKonfigurasjon.defaultProdConfiguration(
    clientId,
    integrationId,
    integrationPassword,
    KontoKonfigurasjon.builder()
        .kontoId(new KontoId(kontoId))
        .privatNokkel(privateKey)
        .build(),
    VirksomhetssertifikatKonfigurasjon.builder()
        .keyAlias(keyAlias)
        .keyPassword(keyPassword)
        .keyStore(keyStore)
        .keyStorePassword(keyStorePassword)
        .build());

KontoKonfigurasjon.builder() kan ta inn flere private nøkler. De kan legges til en og en eller som en liste:

KontoKonfigurasjon.builder()
        .kontoId(new KontoId(kontoId))
        .privatNokkel(privateKey1)
        .privatNokkel(privateKey2)
        .build(),
KontoKonfigurasjon.builder()
        .kontoId(new KontoId(kontoId))
        .privateNokler(Arrays.asList(privateKey1, privateKey2))
        .privatNokkel(privateKey3)
        .build(),

privateNokler: privateNokler property forventer en eller flere private key i PKCS#8 format. En privat nøkkel som har PKCS#1 format vil føre til en exception. En PKCS#1 nøkkel kan bli konvertert ved hjelp av denne kommandoen:

openssl pkcs8 -topk8 -nocrypt -in <pkcs#1 key file> -out <pkcs#8 key file>

Konfigurasjon av Offentlig Nøkkel for mottaker

Ved oppsett av Fiks IO klienten kan man velge om man vil sette opp en egen metode for å hente offentlig nøkkel til mottaker av meldinger. Man må da lage en egen implementasjon av PublicKeyProvider med metoden X509Certificate getPublicKey(final KontoId kontoId). Altså gitt en KontoId skal den returnere en nøkkel som skal benyttes ved sending av meldinger til den kontoen. En instans av denne implementasjonen angis som argument til FiksIOKlientFactory slik: public FiksIOKlientFactory(@NonNull FiksIOKonfigurasjon fiksIOKonfigurasjon, @NonNull PublicKeyProvider publicKeyProvider)

Om man ikke angir en egen implemtasjon av PublicKeyProvider, vil klienten bli satt opp med en instans av KatalogPublicKeyProvider som vil hente offentlig nøkkel fra katalogtjenesten. Man kaller da konstruktøren til FiksIOKlientFactory med kun 1 argument slik: public FiksIOKlientFactory(@NonNull FiksIOKonfigurasjon fiksIOKonfigurasjon)

Dokumentasjon for tjeneste: