2014-01-13 117 views
2

自从我们一直在努力的一个项目开始以来,我一直假设我们能够构建一个WCF Web服务,该服务使用传输级别的两个因子认证客户端证书和WS-Security之后的消息级别用户名密码。我们的计划是实施我们已经完成的消息级别认证,并且一旦我们能够实现我们自己的认证中心,就添加客户端证书的要求。带双因素认证和BizTalk的WCF Web服务

消息级别认证已运行良好一段时间,现在我们能够开始实施客户端证书。我们已经生成了一个客户端证书,我们正在尝试在BizTalk中进行设置,这似乎只让我们选择客户端证书或用户名。安全模式包括无,传输,消息,带消息凭证的传输和仅传输证书。我选择带有消息凭证的传输,因为这似乎与我之后的最接近匹配,但传输安全选项已禁用。

是否有可能利用客户端证书和用户名/密码?

enter image description here

+2

您必须创建自定义行为才能实现此目的。在这里看到一篇关于双层认证的文章(非BizTalk),可以帮助http://blogs.msdn.com/b/saurabs/archive/2013/05/05/10349529.aspx – Dijkgraaf

+0

我仍然试图得到这个加工。在非Biztalk环境中,您的评论有效。基本上,它归结为与像这样一个customBinding配置所述接收位置: <绑定名称= “CustomCDARequestEndpointBinding”> <安全authenticationMode = “UserNameOverTransport”/> < httpsTransport requireClientCertificate =“真” /> 但是,BizTalk的customBinding配置,没有'httpsTransport'绑定元素扩展 – Bensonius

+0

那么现在,你怎么在BizTalk端口允许'httpsTransport'绑定元素扩展,是让这个工作的关键? – Bensonius

回答

0

客户端证书可以对已使用WCF-BasicHttp适配器发送端口的端点标识应用,这是传输层安全(客户端证书)。然后在包含的屏幕截图中显示的安全选项卡中,提供消息层安全性,这将是用户名/密码组合。

下面是身份配置的屏幕截图。您需要填写两个顶部(服务标识)和下段(客户端标识)

编辑:这个答案是不正确的,我有我的设置错误,并将其“工作”,但不是这个原因

enter image description here

+0

你能解释一下它为什么起作用吗?你真的实现了密码和客户端证书认证吗? – Dijkgraaf

+0

你真的会让我承认,在IIS中我的客户端证书设置为“忽略”?这就是为什么我把这是“工作”在上面的引号:(杰里米需要撤销这个答案。 – Bensonius

+0

是的,因为然后其他人可以从中学习:-) – Dijkgraaf

2

我要添加另一个答案,只是为了保持什么不会在这个问题上的工作历史。

这就是说,我终于通过customBinding工作。这次我已经三重检查了IIS是否需要客户端证书:)

它涉及在一个BizTalk应用程序的接收位置和另一个BizTalk应用程序的发送端口上创建自定义绑定,为什么?因为我们的项目涉及一个Biztalk应用程序发送给另一个。

所以,把一切工作,我只好:

接收位置(接收应用程序)

  • 使用Visual Studio中的WCF发布向导使用重新发布接收应用程序“WCF-CustomIsolated”。我想要一个新的开始,并希望让BizTalk/Visual Studio做他们的事情而不是猜测。

enter image description here

  • 我去,并在在BizTalk管理控制台编辑的接收位置。
  • 设置textMessageEncoding messageVersion属性Soap11,因为这是我们一直在使用什么
  • 去除httpTransport绑定元素,因为如果你不这样做,你不能添加httpsTransport元素,它需要
  • 添加了security元素。在这一点上,它看起来像这样(的元素事项顺序)

enter image description here

  • security元件具有称为authenticationMode的属性将其切换到UserNameOverTransport。尽管名称,这是允许用户名与消息一起发送。在security其他一切留下了默认

enter image description here

  • httpsTransport有一个名为requireClientCertificate此设置为“真”一切留下了默认值的属性。

enter image description here

  • 然后加到这是非常简单的,之后,接收位置做我们所要求的行为。

发送端口(发送应用程序)

这是几乎相同的接收,但只是在发送的,而不是接收位置端口。

  • 在绑定选项卡,我再说一遍所概述的接收位置的具体步骤
  • 行为标签,我添加行为扩展名为clientCredentials并成立了以下值则ClientCertificate元素,它只是抢客户端证书位于当前用户存储中,用于您的发送端口以运行的服务帐户。
  • 凭证选项卡我输入了先前在WCF-BasicHttp适配器发送端口的安全选项卡中输入的用户名凭据。

enter image description here

一旦这些全部完成,2个应用程序现在应该能够同时使用客户端证书和用户名,身份验证来相互交谈。

看到我对这个问题的回答,这基本上转化为非BizTalk WCF服务。 How to supply both UserName and Client Certificate in WCF client (why does this example work)?

并且不要忘记重新启动主机实例。

编辑 - 红利如果你最终导出/部署到不同的服务器,即使您导出和导入/单独安装web目录,你可能会得到一个IIS说,它不能找到端点MyService/Myservice.svc认为接收端口/位置被禁用。但是,这是因为它现在是一个WCF-CustomIsolated。解决方案:打开已发布服务的.svc文件,并将Factory属性从BasicHttpWebServiceHostFactory更改为CustomWebServiceHostFactory