【问题标题】:WCF web service with two factor authentication and BizTalk具有两因素身份验证和 BizTalk 的 WCF Web 服务
【发布时间】:2014-01-31 06:46:36
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为你必须创建一个自定义行为来实现这一点。请参阅此处有关双层身份验证的文章(非 BizTalk),这可能有助于blogs.msdn.com/b/saurabs/archive/2013/05/05/10349529.aspx
  • 我仍在努力让它发挥作用。在非 Biztalk 环境中,您的评论有效。基本上它归结为使用 customBinding 配置接收位置,如下所示: 但是,BizTalk 的 customBinding 配置,没有 httpsTransport 绑定元素扩展
  • 那么现在,如何让 BizTalk 端口允许 httpsTransport 绑定元素扩展,这是使其工作的关键?

标签: wcf biztalk wcf-security biztalk-2010


【解决方案1】:

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

话虽如此,我终于通过 customBinding 让它工作了。这次我三重检查了 IIS 是否需要客户端证书:)

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

所以,为了让这一切顺利进行,我必须:

接收位置(接收申请)

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

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

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

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

  • 然后添加我们需要的行为,这非常简单,之后,接收位置就完成了。

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

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

  • 在绑定选项卡上,我重复为接收位置概述的确切步骤
  • Behavior 选项卡我添加了名为 clientCredentials 的 Behavior 扩展,并在 ClientCertificate 元素中设置了以下值,这些值仅获取 Current User Store 中用于发送端口的服务帐户的客户端证书运行为
  • 凭据选项卡 我输入了之前在 WCF-BasicHttp 适配器发送端口的安全选项卡中输入的用户名凭据。

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

请参阅我对这个问题的回答,了解这在非 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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 你能解释一下为什么它会起作用吗?你真的实现了密码和客户端证书认证吗?
    • 你真的要让我承认在 IIS 中我将客户端证书设置为“忽略”吗?这就是为什么我在上面的引号中加上“有效”的原因:(杰里米需要撤销这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多