Laden...

WCF Authentication Header

Erstellt von inflames2k vor 3 Jahren Letzter Beitrag vor 3 Jahren 329 Views
inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 3 Jahren
WCF Authentication Header

Hallo,

für normale Webservices ("Service.asmx") nutzen wir einen Authentifizierungsmechanismus mit einem "ServiceAuthenticationHeader". Für ein aktuelles Projekt brauchen wir dies auch für WCF Services.

Das wichtige ist, dass der SoapHeader genauso aussehen soll wie beim normalen Webservice.


<Header>
    <ServiceAuthHeader>
         <UserID>...</UserID>
         <Password>...</Password> 
    </ServiceAuthHeader>
</Header>
<Body>
</Body>

Das funktioniert soweit, wenn ich im Client den ServiceAuthHeader noch mal bekannt mache und als MessageContract bekannt gebe. Dann kann ich den Header mit Hilfe von folgendem hinzufügen:


using (ServiceClient client = new ServiceClient())
{
    using (OperationContext ctx = new OperationContext(client.InnerChannel))
    {
        ServiceAuthHeader header = this.GetAuthHeader();
        System.ServiceModel.Channels.MessageHeader authHeader = System.ServiceModel.Channels.MessageHeader.CreateHeader("ServiceAuthHeader", string.Empty, header);
        System.ServiceModel.OperationContext.Current.OutgoingMessageHeaders.Add(authHeader);

        // execute service call
        // ...
    }
}

Das unschöne daran ist, dass der Aufrufer die ServiceAuthHeader-Klasse quasi selbst noch einmal entwickeln muss mit den entsprechenden Eigenschaften. Gibt es hier einen Weg, wo svcutil den Header schon im Client-Proxy mit generiert?

Bei dem ganzen handelt es sich um eine Schnittstelle für einen externen Dienstleister. - Daher wollen wir es diesem nun auch nicht unnötig schwer machen den AuthHeader abzubilden.

Bei einfachen Webservices reicht es in der Service.asmx.cs den ServiceAuthHeader als Property hinzuzufügen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

16.806 Beiträge seit 2008
vor 3 Jahren

svcutil ist nur ein Generator, der die Basis-Features erstellt; er deckt nicht mal annähernd alle Anforderungen an WCF Services ab.
Auth gehört leider nicht dazu.

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 3 Jahren

Haben es jetzt so gelöst, dass das generierte Soap in etwa dem entspricht, was Asmx-Webservices auch generieren, durch Verwendung von MessageContracts.
Ist zwar ein wenig Klassen-OVerhead im Dienst, dafür bleibt die Client-Anbindung einfach.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |