在WCF服务中公开多个特定于客户端的端点的最佳实践?

时间:2010-09-28 14:13:05

标签: wcf wcf-security x509certificate

继续使用WCF重新设计Web服务架构,我们的团队一直在讨论我们希望如何公开端点。示例:我有一个标准端点,所有用户都可以使用正确的令牌,但我也有一些端点,而不是使用证书安全性。所有端点最终都将使用相同的实现,因此这实际上只是进入系统的不同方式。

证书端点必须指向商店中的特定证书,因此仅适用于一个特定客户端。我们的想法是我们的​​标准服务可以在http://mysite.com/MyService.svc生效,证书端点可以是http://mysite.com/MyService.svc/Acme。这里的问题是我有效地将我们的客户列表放入我们的WSDL中,这是不可取的。

这里的最佳做法是什么?有没有办法通过单个证书端点引导多个客户端并在代码端获取证书(如何在没有特定端点的情况下知道我们正在处理哪个客户端)?隐藏该客户列表的最佳方法是什么?是否有一个我没有看到的完全更好的解决方案?

2 个答案:

答案 0 :(得分:1)

配置您的服务行为,如:

       <behavior name="CertBeh">

            <serviceCredentials>

                <clientCertificate>

                    <authentication certificateValidationMode="PeerTrust" />

                </clientCertificate>

            </serviceCredentials>

        </behavior>

PeerTrust告诉WCF查看客户端提供的证书是否在TrustedPeople商店中。因此,将所有客户证书放在您服务所在的盒子上的商店,你会没事的。有关其他可能的选项,请参阅this article

答案 1 :(得分:0)

您无需为每个客户端创建单独的端点。使用基于客户端证书的身份验证创建单个端点,并使用您自己的身份验证逻辑实现您自己的X509CertificateValidator