使用SSON cookie与HTTPS安全性的WCF连接

时间:2016-07-12 11:26:25

标签: c# wcf cookies https

我对cookies的经验很少,所以我需要一些帮助。

我有一个场景,我必须使用 https 安全性建立到远程端点的WCF连接。客户端配置中的端点地址实际指向Web 代理,如果检测到SSON身份验证或重定向到身份验证页面,则会将请求重定向到实际端点,这种情况很复杂。

示例:客户端配置的服务地址为“https://a.com/my.svc”。如果auth正常,我将连接到此地址,否则,我将被重定向到“https://a.com/auth”,成功后,auth将再次进入“https://a.com/my.svc

如果我在Web浏览器中打开地址,我将被重定向到auth页面并在成功验证后(login / pwd),然后重定向到该地址。在验证之后,生成SSON cookie,并且所有后续的地址查询都会直接引导我到该地址,而无需额外的身份验证。

截至目前,我已完成以下工作:

  1. 使用WPF WebBrowser 控件进行身份验证。之后我就拿到了饼干。
  2. 建立客户端端点连接。是的,会话在prod环境中默认使用,我不确定我是否可以删除它。

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

  3. 直接连接正常。我的意思是我没有连接到代理地址,而是使用最终端点地址而不使用cookie。

  4. 现在问题是如何让我的WCF连接使用SSON coookie绕过 ClientBase.Open 电话上的身份验证页面?

1 个答案:

答案 0 :(得分:1)

从auth表单获得SSO cookie后,您可以使用OperationContextScope发送HTTP标头。

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();

}