c# - 使用消息安全和客户端凭据类型“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 身份验证?
我找不到任何关于我的问题的线程,除了这个没有收到任何答案的线程。所以任何帮助将不胜感激。
解决方案
推荐阅读
- profiling - 什么会导致计算器的状态直接从 READY_FOR_PROCESS 进展到 NOT_READY?
- python - 检查 Pandas 数据框中是否存在日期索引
- python - 将非结构化模式读入 Spark
- python-3.x - 为什么我不能下载csv文件类型,但PDF文件类型成功,是不是下载的CSV文件被截获了?
- javascript - 如何为 Material UI 搜索栏中的“X”图标添加功能?
- python-3.x - 创建中间步骤临时变量重要吗?如何在python中为字符串完成动态内存分配?
- python - 如何仅显示更新/实时图表中的最后 20 个结果
- python - 打印列表时函数打印空值?
- linux - 搜索一个文件以查看它是否包含来自另一个文件的信息
- node.js - GraphQL 使用 mongodb 原生驱动返回数据