【问题标题】:How interopable is WS-Security?WS-Security 的互操作性如何?
【发布时间】:2023-03-20 04:51:01
【问题描述】:

我最近参与了一个涉及 WCF 服务的项目,并使用wsHttpBinding 进行身份验证。使用 PHP 使用该服务的第三方抱怨说这种方法在 PHP 中不能开箱即用,而且互操作性不够(他们更喜欢 RESTful 方法,使用 GET 传递凭据..)

我从未使用过 PHP 服务,他们的论点站得住脚吗?

展开:

无法在您的语言/环境中获得开箱即用的东西并不一定是缺乏互操作性的一个很好的论据,我并不真正相信它们。不过,我很好奇它在更广泛的范围内的互操作性如何,因为我希望我的服务不仅可以由 .NET 客户端轻松使用。

补充说明:

我使用 TransportWithMessageCredential,凭据在服务中验证,而不是通过 IIS。以这种方式向 RESTful 服务提供凭据的首选方式是什么? (这应该是一个单独的问题吗?)。我只是想知道在这种情况下它是否是一个可行的选择。

【问题讨论】:

  • PHP 是一种脚本语言。发现它没有开箱即用地实施国际标准,我不会感到震惊。

标签: wcf security soap ws-security


【解决方案1】:

我的一些客户也遇到了同样的问题(也从 PHP 调用我的服务)。

所以我们只是暴露了一个额外的 basicHttpBinding 端点。

我在该端点中使用 Transport 安全性和 UsernamePassword 身份验证。

【讨论】:

  • 我的服务仍然需要消息安全,这仅适用于wsHttpBinding
  • @diggingforfire - 为什么不使用传输安全性?无法将 wsHttpBinding 与 PHP 一起使用。我使用传输 (SSL) 进行加密,使用用户名/密码进行身份验证。
  • 凭据需要由服务处理,而不是由网络服务器 (IIS) 处理,因此它们需要在消息中。虽然它仍然是 HTTPS(如果没有 HTTPS,您将无法使用消息安全性)
  • @diggingforfire - 我的服务在一个进程中自托管,我自己检查用户名/密码。我相信您也可以使用 IIS 来实现,也许您可​​以通过实现自己的 UserNamePasswordValidator (msdn.microsoft.com/en-us/library/aa702565.aspx) 来实现。
  • 顺便说一句,您可以在没有 SSL 的情况下使用消息安全性。为此,您需要将安全模式从 TransportWithMessageCredentials 更改为 Message。
【解决方案2】:

确实,REST 很容易在各种编程平台和操作系统上实现(例如,Linux 机器上的 PHP,这是一种非常常见的设置)。

WS-Security 作为 SOAP 的扩展,是一种标准化协议,并且存在针对 .NET 以外的其他平台的实现。然而,这里的免费库的范围非常有限(对于 PHP,我不知道),这肯定意味着连接到 WS-Security 服务比连接到简单的 REST 服务要付出更多的努力,至少如果服务使用协议的话超出普通 SOAP 范围的功能。

还有一点:HTTP 内置了身份验证支持,因此您绝对可以实现经过身份验证的 RESTful 服务,而无需向请求的 URL 添加凭据。

【讨论】:

  • 我已经更新了我的问题,但传输本身不需要验证,而是消息。该服务使用TransportWithMessageCredential,并且该服务验证凭据。
  • 我怀疑在非 .NET 语言(如 PHP)中使用这样的功能是否会很容易。如果您想知道如何实现与 REST 相当的目标,那值得提出一个新问题。另请参阅stackoverflow.com/questions/1933234/… 了解更多信息。
  • REST 不是协议。这只是一种技术。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多