首页 > 解决方案 > 使用消息安全和客户端凭据类型“Windows”的 Docker 容器内的 WCF

问题描述

我正在尝试使用具有安全模式message和客户端凭据类型的绑定在 docker 容器内运行 WCF 服务Windows。就像是:

...
<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding_IService1">
      <security mode="Message">
        <message clientCredentialType="Windows"/>
      </security>
    </binding>   
  </wsHttpBinding>
</bindings>
...

我已经成功创建并启动了容器,并且感谢 gMSA 和在此处找到的教程,我可以从容器内的服务中使用 Windows 身份验证针对 SQL Server 2016 发出 SQL 命令。

到目前为止一切顺利,但是当使用在 docker 主机上运行的客户端连接到容器内的服务时,我收到了错误消息:

System.ServiceModel.Security.SecurityNegotiationException:
服务器已拒绝客户端凭据

据我了解,这种情况正在发生,因为 docker 容器正在使用它的主机名(在检查它之后,它docker exec似乎是一些哈希值)来向域控制器询问有效的凭据。由于容器不是域的一部分(即使它认为这是由于 gMSA),域控制器拒绝该请求,并且客户端会收到上述消息。

所以我的问题是:这真的是发生了什么,还是我错过了什么?有什么方法可以使 Windows 身份验证与上述绑定一起工作,还是我的方法在概念上存在缺陷?也许还有另一种方法可以在 docker 内使用 WCF 进行 Windows 身份验证?

我找不到任何关于我的问题的线程,除了这个没有收到任何答案的线程。所以任何帮助将不胜感激。

标签: c#.netwindowswcfdocker

解决方案


推荐阅读