2016-07-12 13 views
2

Ich habe wenig Erfahrung mit Cookies, so brauche ich hier Hilfe.WCF-Verbindung mit HTTPS-Sicherheit mit SSON-Cookie

Ich habe ein Szenario, wo ich WCF-Verbindung zum Remote-Endpunkt unter Verwendung der https Sicherheit herstellen muss. Die Situation wird dadurch erschwert, dass die Endpunktadresse in der Client-Konfiguration tatsächlich auf ein Web Proxy verweist, das die Anfrage an den tatsächlichen Endpunkt umleitet, wenn die SSON-Authentifizierung erkannt wurde oder auf die Authentifizierungsseite umgeleitet wurde.

Beispiel: Die Serviceadresse für die Clientkonfiguration lautet 'https://a.com/my.svc'. Wenn Auth OK ist, werde ich an diese Adresse verbinden, wenn nicht, werde ich zu ‚https://a.com/auth‘ weitergeleitet und nach erfolgreicher Auth wird fortgesetzt, wieder zu ‚https://a.com/my.svc

Wenn ich die Adresse im Web-Browser öffnen i umgeleitet bin zu auth Seite und nach erfolgreicher Authentifizierung (Login/Pwd) dann an die Adresse weitergeleitet. Nach der Authentifizierung wird der SSON-Cookie generiert und alle nachfolgenden Adressabfragen führen mich direkt zur Adresse ohne zusätzliche Authentifizierung.

Ab jetzt habe ich folgendes getan:

  1. Sie Auth WPF WebBrowser Steuerung. Ich habe danach den Keks.
  2. Die Client-Endpunktverbindung wurde hergestellt. Ja, die Sitzung wird standardmäßig in der Prod-Umgebung verwendet, ich bin mir nicht sicher, ob ich sie entfernen kann.

    <customBinding> 
    <binding name="WSHttpsBinding_IDB2Connector"> 
        <reliableSession inactivityTimeout="23:59:59" ordered="True"/> 
        <httpsTransport requireClientCertificate="false" /> 
    </binding> 
    

  3. Direktverbindung funktioniert. Ich meine, ich verbinde mich nicht mit der Proxy-Adresse, sondern benutze stattdessen die endgültige Endpunkt-Adresse und verwende keine Cookies.

Nun das Problem ist, wie ich meine WCF-Verbindung zu verwenden SSON coookie zu umgehen Auth Seite auf ClientBase.Open callte kann?

+0

Ich bin nicht sicher, das ist immer möglich/I mit msg Header spielen kann, aber nur, wenn die Verbindung bereits hergestellt ist. Und das Problem ist, dass ich die Verbindung ohne die Plätzchen nicht herstellen kann. –

Antwort

1

Sobald Sie SSO-Cookie von Auth-Formular haben, können Sie OperationContextScope verwenden, um HTTP-Header zu senden.

YourServiceClient client = new YourServiceClient(); 
using(new OperationContextScope(client.InnerChannel)) 
{ 
    // Add a HTTP Header to an outgoing request 
    HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty(); 
    requestMessage.Headers["Cookie"] = "MySSOCookie=MySSOCookieValue"; //SSOCookie content 
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage; 

    client.doSomething(); 

}