Page History
...
En klient til en WebService af typen Den Gode Webservice benyttes som 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 WCF svcutil tool overview - .NET | Microsoft Learn hvis Visual Studio ikke er tilstrækkelig.
Herefter kan der være flere klient-scenarier:
...
1. Opretter en SosiFactory og IdCardRequest
2. Kalder LoginToGateway som har inline kommentar
3. FMK klient oprettes.
4. Service kaldes
Konfiguration:
SOSIGW
<endpoint address="http://test2.ekstern-test.nspop.dk:8080/sosigw/service/sosigw"
binding="basicHttpBinding"
contract="SosiGwService.SosiGWFacade"
name="SosiGWSoapBinding"/>
FMK
<endpoint address="https://test2.fmk.netic.dk/fmk12/ws/MedicineCard"
behaviorConfiguration="AddressingBehavior"
binding="customBinding"
bindingConfiguration="Soap11Http"
contract="MedicinCard.MedicineCardPortType"
name="SosiGWFMK"/>
<customBinding>
<binding name="Soap11Http">
<textMessageEncoding messageVersion="Soap11WSAddressing10" writeEncoding="utf-8" />
<httpTransport />
</binding>
</customBinding>
<behavior name="AddressingBehavior">
<clientVia viaUri="http://test2.ekstern-test.nspop.dk:8080/sosigw/proxy/soap-request"/>
</behavior>
SOSI Gateway
...
oprettelse af ID kort
Her vises Oprettelse af et SOSI ID kort i GW på baggrund af et bruger-signeret ID kort.
Der bruges en WCF service reference, SosiGWFacadeClient, der er lavet ud fra den WSDL fil som SOSI GW udstiller:
SOSI Gateway kan bruges til SBO (Sikker Browser Opstart).
Det første der skal gøres er at logge ind i SOSI GW. Dette gøres ved at sende det ID kort man har til SOSI Gateway, som vil gemme kortet i dens cache.
Ved efterfølgende kald til SOSI GW vil den kun kigge på Name ID (også kaldet Alternative Identifier i andre sammenhænge) i ID kortet der sendes,
og kigge i dens cache om den har et ID kort med samme Name ID liggende. Hvis den har, vil den erstatte ID kortet i det request den har modtaget, med det der ligger i dens cache.
Først logges der ind i gateway'en. Der bruges en WCF service reference, SosiGWFacadeClient, der er lavet ud fra den WSDL fil som SOSI GW udstiller:
Code Block | ||
---|---|---|
| ||
public static async Task LoginToGateway(IdCard idCard, X509Certificate2 userCert) { var sosiGwAssertion = idCard.GetAssertion<AssertionType>(); var security = new GW.Security { Timestamp = new GW.Timestamp { Created = DateTimeEx.UtcNowRound - TimeSpan.FromMinutes(5) }, Assertion = sosiGwAssertion }; const string endpointAddress = "http://test1.ekstern-test.nspop.dk:8080/sosigw/service/sosigw"; using var gwClient = new SosiGWFacadeClient(SosiGWSoapBinding, endpointAddress); var dig = (await gwClient.requestIdCardDigestForSigningAsync(security, "whatever")).requestIdCardDigestForSigningResponse; var digestHash = SHA1.HashData(dig.DigestValue); var signature = userCert.GetRSAPrivateKey().SignHash(digestHash, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); var cardRequestBody = new signIdCardRequestBody { SignatureValue = signature, KeyInfo = new GW.KeyInfo { Item = new GW.X509Data { Item = userCert.Export(X509ContentType.Cert) } } }; // The STS signed card is saved in the sosiGw cache and is used for future calls through the proxy var res = (await gwClient.signIdCardAsync(security, cardRequestBody)).signIdCardResponse; if (res != signIdCardResponse.ok) { throw new Exception("Gateway logon error"); } // Convert the GW Assertion to a dgwsType Assertion a dgwsType Assertion var sosiGwAssertionDocument = SerializerUtil.Serialize(sosiGwAssertion).Root; var sosiGwAssertionDocument = SerializerUtil.Serialize(sosiGwAssertion).Root; SerializerUtil.Deserialize<Assertion>(sosiGwAssertionDocument, typeof(AssertionType).Name); }SerializerUtil.Deserialize<Assertion>(sosiGwAssertionDocument, typeof(AssertionType).Name); } |
SOSI Gateway SBO
SOSI Gateway kan bruges til SBO (Sikker Browser Opstart).
Det første der skal gøres er at logge ind i SOSI GW. Dette gøres ved at sende det ID kort man har til SOSI Gateway, som vil gemme kortet i dens cache.
Ved efterfølgende kald til SOSI GW vil den kun kigge på Name ID (også kaldet Alternative Identifier i andre sammenhænge) i ID kortet der sendes, og kigge i dens cache om den har et ID kort med samme Name ID liggende. Hvis den har, vil den erstatte ID kortet i det request den har modtaget, med det der ligger i dens cache.
Se SOSI Gateway oprettelse af ID kort.
Herefter kan ID kort ombyttes til SAML tokens med 'Sosi2SamlStsClient':
...