【问题标题】:WCF connection with HTTPS security using SSON cookie使用 SSON cookie 与 HTTPS 安全性的 WCF 连接
【发布时间】:2016-11-14 14:49:39
【问题描述】:

我没有 cookie 的经验,所以我需要一些帮助。

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

示例:客户端配置的服务地址为“https://a.com/my.svc”。如果身份验证正常,我将连接到该地址,如果没有,我将被重定向到“https://a.com/auth”,成功后身份验证将再次转到“https://a.com/my.svc

如果我在 Web 浏览器中打开该地址,我将被重定向到身份验证页面,并且在成功身份验证(登录/密码)后重定向到该地址。身份验证后会生成 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。

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

【问题讨论】:

  • 我不确定这是否可能/我可以使用 msg 标头,但前提是已经建立连接。问题是我无法在没有 cookie 的情况下建立连接。

标签: c# wcf cookies https


【解决方案1】:

从身份验证表单获得 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();

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2015-04-15
    • 1970-01-01
    • 2013-03-09
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多