Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有双因素身份验证和BizTalk的WCF web服务_Wcf_Biztalk_Wcf Security_Biztalk 2010 - Fatal编程技术网

具有双因素身份验证和BizTalk的WCF web服务

具有双因素身份验证和BizTalk的WCF web服务,wcf,biztalk,wcf-security,biztalk-2010,Wcf,Biztalk,Wcf Security,Biztalk 2010,从我们所从事的一个项目开始,我一直假设我们能够构建一个WCF web服务,该服务使用传输级别的客户端证书和消息级别的用户名密码,在WS-Security之后使用双因素身份验证。我们的计划是实现我们已经完成的消息级身份验证,并在我们能够实现自己的证书颁发机构后添加客户端证书的要求 消息级身份验证已经运行了一段时间,现在我们可以开始实现客户端证书了。我们已经生成了一个客户端证书,我们正在尝试在BizTalk中设置它,它只允许我们选择客户端证书或用户名。安全模式包括无、传输、消息、带有消息凭据的传输以

从我们所从事的一个项目开始,我一直假设我们能够构建一个WCF web服务,该服务使用传输级别的客户端证书和消息级别的用户名密码,在WS-Security之后使用双因素身份验证。我们的计划是实现我们已经完成的消息级身份验证,并在我们能够实现自己的证书颁发机构后添加客户端证书的要求

消息级身份验证已经运行了一段时间,现在我们可以开始实现客户端证书了。我们已经生成了一个客户端证书,我们正在尝试在BizTalk中设置它,它只允许我们选择客户端证书或用户名。安全模式包括无、传输、消息、带有消息凭据的传输以及仅传输凭据。我选择带有消息凭据的传输,因为这似乎与我所追求的最接近,但是传输安全选项被禁用

是否可以同时利用客户端证书和用户名/密码


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

这是身份配置的屏幕截图。您需要填写顶部(服务标识)和底部部分(客户标识)

编辑:此答案不正确,我的设置错误,它“起作用”,但不是因为这个原因


我将添加另一个答案,只是为了保留这个问题中不起作用的内容的历史记录

尽管如此,我最终还是通过定制绑定实现了它。这次我已经三次检查了IIS是否需要客户端证书:)

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

因此,为了让这一切顺利进行,我必须:

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

  • 使用Visual Studio中的WCF发布向导,使用“WCF CustomIsolated”重新发布接收应用程序。我希望有一个新的开始,并希望让BizTalk/Visual Studio完成他们的工作,而不是猜测

  • 我在BizTalk管理控制台中编辑了接收位置
  • 将textMessageEncoding messageVersion属性设置为Soap11,因为我们一直在使用它
  • 删除了
    httpTransport
    绑定元素,因为如果不这样做,就无法添加所需的
    httpTransport
    元素
  • 添加了
    安全性
    元素。在这一点上,看起来是这样的(元素的顺序很重要)

  • security
    元素有一个名为
    authenticationMode
    的属性,该属性已切换到UserNameOverTransport。不管名称如何,这是允许用户名与消息一起发送的原因。
    security
    中的所有其他内容都保留了默认值

  • httpsTransport
    有一个名为
    requireClientCertificate
    的属性,该属性设置为“true”,其他所有属性都保留默认值

  • 然后添加了我们需要的行为,这非常简单,之后,接收位置就完成了
发送端口(发送应用程序)

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

  • 在Binding选项卡上,我重复为Receive位置概述的确切步骤
  • 行为选项卡我添加了名为
    clientCredentials
    的行为扩展,并在ClientCertificate元素中设置了以下值,这些值仅获取当前用户存储中的客户端证书,该证书用于发送端口作为运行的服务帐户
  • 凭据选项卡我输入了以前在WCF BasicHttp适配器发送端口的安全选项卡中输入的用户名凭据

完成这一切后,这两个应用程序现在应该能够使用客户端证书和用户名身份验证相互通信

请参阅我对这个问题的回答,了解这在非BizTalk WCF服务中的基本含义

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


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

,我认为您必须创建一个自定义行为来实现这一点。请参阅此处的一篇文章(非BizTalk),该文章介绍了双层身份验证,这可能有助于我仍在努力实现这一点。在非Biztalk环境中,您的注释有效。基本上可以归结为使用customBinding配置接收位置,如下所示:但是,BizTalk的customBinding配置现在没有
httpsTransport
Binding元素扩展,您如何让BizTalk端口允许绑定元素扩展,这是使其正常工作的关键?您能解释为什么吗