继续使用WCF重新设计Web服务架构,我们的团队一直在讨论我们希望如何公开端点。示例:我有一个标准端点,所有用户都可以使用正确的令牌,但我也有一些端点,而不是使用证书安全性。所有端点最终都将使用相同的实现,因此这实际上只是进入系统的不同方式。
证书端点必须指向商店中的特定证书,因此仅适用于一个特定客户端。我们的想法是我们的标准服务可以在http://mysite.com/MyService.svc生效,证书端点可以是http://mysite.com/MyService.svc/Acme。这里的问题是我有效地将我们的客户列表放入我们的WSDL中,这是不可取的。
这里的最佳做法是什么?有没有办法通过单个证书端点引导多个客户端并在代码端获取证书(如何在没有特定端点的情况下知道我们正在处理哪个客户端)?隐藏该客户列表的最佳方法是什么?是否有一个我没有看到的完全更好的解决方案?
答案 0 :(得分:1)
配置您的服务行为,如:
<behavior name="CertBeh">
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust" />
</clientCertificate>
</serviceCredentials>
</behavior>
PeerTrust告诉WCF查看客户端提供的证书是否在TrustedPeople商店中。因此,将所有客户证书放在您服务所在的盒子上的商店,你会没事的。有关其他可能的选项,请参阅this article。
答案 1 :(得分:0)
您无需为每个客户端创建单独的端点。使用基于客户端证书的身份验证创建单个端点,并使用您自己的身份验证逻辑实现您自己的X509CertificateValidator。