我正在尝试使用安全模式message
和客户端凭据类型Windows
的绑定在docker容器中运行WCF服务。类似的东西:
...
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding_IService1">
<security mode="Message">
<message clientCredentialType="Windows"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
...
我已经成功创建并启动了容器,感谢gMSA和发现here的教程,我可以在容器内的服务中使用Windows身份验证对SQL Server 2016发出SQL命令。
到目前为止一切顺利,但是当在Docker主机上运行客户端连接到容器内的服务时,我收到了错误消息:
System.ServiceModel.Security.SecurityNegotiationException: The server has rejected the client credentials
据我所知,这种情况正在发生,因为docker容器正在使用其主机名(在使用docker exec
检查后,似乎是某些哈希值)要求域控制器提供有效凭据。由于容器不是域的一部分(即使它认为是由于gMSA),域控制器拒绝该请求,并且客户端收到上述消息。
所以我的问题是:这真的发生了什么,还是我错过了什么?有没有办法让Windows身份验证与上面的绑定一起工作,或者我的方法在概念上有缺陷?也许还有另一种方法可以在Docker中使用WCF进行Windows身份验证吗?
除了没有收到任何答案的this one之外,我找不到关于我的问题的任何线索。所以任何帮助都会非常感激。