Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • app.config er erstattet af appsettings.json og bruges kun til at sætte enkelte parametre:

    Code Block
    languagejs
    {
        "CheckTrust": true,
        "CheckDate": true,
        "CheckCrl": false,
        "sosi:dgws.version": "1.0.1",
        "sosi:issuer": "TheSOSILibrary",
        "credentialVault:alias": "SOSI:ALIAS_SYSTEM"
    }

    Værdierne her er også default-værdierne, hvis en parameter eller hele appsettings-filen udelades.


    Førhen var der ikke overensstemmelse mellem hvad standardværdierne var angivet til i dokumentationen og i koden. 
    Koden er ændret, så den nu stemmer overens med dokumentationen.

    Generelt for .NET Standard og WCF gælder det, at det der før blev konfigureret i app.config, nu konfigureret i kode.

    Her er et eksempel på en klient, NtsWSProviderClient, der er generet ud fra en WCF service reference, som konfigureres i kode, frem for gennem app.config:

    Code Block
    languagec#
    var binding = new CustomBinding();
    binding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11WSAddressingAugust2004, Encoding.UTF8));
    binding.Elements.Add(new HttpTransportBindingElement());
    
    var client = new NSTWsProvider.NtsWSProviderClient(binding, new EndpointAddress("https://test1-cnsp.ekstern-test.nspop.dk:8443/nts/service"));
    
    client.Endpoint.EndpointBehaviors.Add(new SealEndpointBehavior());
    client.Endpoint.EndpointBehaviors.Add(new ViaBehavior(new Uri("http://test1.ekstern-test.nspop.dk:8080/sosigw/proxy/soap-request")));
    
    var dgwsHeader = new Header()
    {
        SecurityLevel = 4,
        SecurityLevelSpecified = true,
        Linking = new Linking { MessageID = Guid.NewGuid().ToString("D") }
    };
    
    using (new OperationContextScope(client.InnerChannel))
    {
        // Adding seal-security and dgws-header soap header
        OperationContext.Current.OutgoingMessageHeaders.Add(new IdCardMessageHeader(sealCard));
        OperationContext.Current.OutgoingMessageHeaders.Add(XmlHeader(dgwsHeader));
         // Throws Exception if not succesful. 
        return client.invokeAsync("test");
    }
  • Der er tilfælde hvor man måske ønsker at konfigurere en clientVia endpointbehavior på en Web Service Reference som man har tilføjet.
    Det blev før gjort i app.config, men da denne ikke længere findes, er der lavet en endpointbehavior klasse som hedder 'ViaBehavior'.
    Den bruges som alle andre IEndPointBehavior-klasser:

    Code Block
    languagec#
    client.Endpoint.EndpointBehaviors.Add(new ViaBehavior(new Uri("<via URI>")));
  • 5.0.0 kræver ikke nær så meget konfiguration som ældre Seal.NET versioner, da meget konfiguration nu håndteres internt af biblioteket.
    Det medfører desuden, at det nu fremgår af metode-signaturen for Sosi2SamlStsClient og Saml2SosiStsClient, hvis man skal tage stilling til en konfiguration.

  • AbstractCrendentialVault, GenericCertStoreCredentialVault og GenericCredentialVault er fjernet.

    Man kan enten give certifikatet direkte til metoder som skal bruge et certifikat, eller læse det ind fra et certificate store med:

    Code Block
    languagec#
    new dk.nsi.seal.Vault.ThumbprintCertStoreCredentialVault(certThumbprint).GetSystemCredentials();

    Internt bruger ThumbprintCertStoreCredentialVault X509Store klassen til at loade et certifikatet fra et certificate store.

    Man kan også implementere sin egen klasse til det, ved at arve fra dk.nsi.seal.Vault.ICredentialVault.

    Essentielt er ICredentialVault bare en måde at give et certifikat til en metode, og alle metoder der bruger den, kunne ændres så de tager et X509Certificate2 i stedet. Så ville man selv kunne bestemme hvordan man vil indlæse certifikater, i stedet for at Seal.NET dikterer at man skal bruge ICredentialVault. Denne ændring er dog ikke en del af scope for '5.0.0'.

  • SealCard er fjernet, og fuldt erstattet af IdCard.
  • DgwsHeader er fjernet, og DgwsMessageHeader er omdøbt til XmlMessageHeader, da den ikke gør noget DGWS specifikt, men tager noget XML og indsætter det som Header content, når den tilføjes til WCF OutgoingMessageHeaders.

    Den laves nu med en static metode 'XmlMessageHeader.XmlHeader', som direkte tager den værdi der før blev givet til DgwsHeader constructor. Se XmlMessageHeader.

  • IdCardMessageHeader laves nu med en static constructor IdCardMessageHeader.IdCardHeader.
  • SealSigningEndpointBehavior tager nu ClientCredentials direkte i constructor, i stedet for at den specificeres gennem app.config og gives til SealSigningEndpointBehavior gennem AddBindingParameters.
  • Create-metoder i SOSIFactory er nu static.
  • ICredentialVault-argument er fjernet fra 'SignatureUtil.Validate', da den ikke blev brugt til noget.
  • SosiFactory.GetCredentialVault er omdøbt til GetCertificate, og returner nu X509Certificate2. 

...

Meget simpel klasse, der internt blot sætter en enkelt værdi til den Via via URL man angiver.

Factories

...

På sigt kan dette blive simplificeret, så man direkte kan give et X509Certificate2, i stedet for at man skal forbi et det ICredentialVault interface, som vaults arver fra.

...

Der er to slags valideringer af et certifikat der kan aktiveres/deaktiveres i appsettings.json.

CheckTrust

CheckTrust specificerer om certifikatet skal valideres op mod et root certifikat og om chainen skal valideres. Hvis en federation er specificeret så er det valideringen mod den federation som bliver aktiveret-deaktiveret. Skal slås fra ved self signed certifikater.

...

CheckTrust er per default True.

CheckCrl

CheckCrl specificerer om certifikatet skal checkes op mod en Certificate Revocation List. Skal slås fra ved self-signed certifikater.

...

En klient til en WebService af typen Den Gode Webservice benyttes som en hver enhver anden webservice.
I Visual Studio tilføjes en Service-Reference til den pågældende WSDL. Herefter genereres en proxy indeholdende alle datatyper for webservicen.
Det er også muligt at benytte WcfUtil.exe WCF svcutil tool overview - .NET | Microsoft Learn hvis Visual Studio ikke er tilstrækkelig.
Herefter kan der være flere klient-scenarier:

  1. Direkte kald af Service (ikke føderalt): Her oprettes et kort lokalt og Service Udbyderen kaldes med det oprettede kort. Det er så op til Service Udbyderen at autentificere brugeren,.
  2. FøderaltEt Føderalt: Et kort oprettes lokalt valideres via et kald til en STS, som returnerer et kort der er digitalt underskrevet. Dette kort benyttes til fremtidige kald af webservices. Service Udbyderen skal nu kun autentificere STS'en.
  3. Via NemIdHvis NemId:Hvis en bruger allerede er logget på et system via NemLogin, kan dette login benyttes til at kalde en webservice. Til NemLogin er associeret en SamlTokenSAML token. Denne token skal veksles til et IDKort til Den Gode WebserviceDGWS ID kort. Når IDKortet ID kortet er modtaget, benyttes det til fremtidige kald.
  4. SOSI Gateway: Benyttes ved sikker browsser opstart (SBO).

Til efterfølgende eksempler benyttes nogle metoder til at oprette instanser af datatyper.
MakeHeader og MakeSecurity.
Disse metoder opretter instanser af de før nævnte klasser; Security og Header.
Der benyttes desuden variablerne callingSystem og user, som kan ses under " eksempler på generering af proxyklasser".
Eksemplerne viser et kald til en FKM webservice. Metodekaldet er GetMedicineCard_2015_06_01

...