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