【问题标题】:What is the best way to secure SOAP web service on an internal private network在内部专用网络上保护 SOAP Web 服务的最佳方法是什么
【发布时间】:2011-11-20 01:25:45
【问题描述】:

如今,为内部使用而开发的 Web 服务越来越多,以将应用程序连接在一起。我们没有 ESB 来控制和保护这些 Web 服务,所以我想知道什么是保护它们的好方法。

我们已尝试设置双向 SSL,但我们无法控制对特定 Web 服务的授权。

我需要能够控制哪个应用程序正在调用我的 Web 服务以及该应用程序是否有权调用它。

我不喜欢 WS-Trust 和 Ws-Security,因为这会改变原始 SOAP 消息,但似乎它们不是其他解决方案。

有什么想法吗?

谢谢

【问题讨论】:

    标签: java web-services jax-ws ws-security


    【解决方案1】:

    在您的问题中,您提到您不想修改当前的 SOAP 消息 - 这意味着消息级别的安全性已失效。

    因此,您需要继续使用传输级别的安全性。

    即使使用两种方式的 SSL,您也可以根据用户证书的指纹对用户进行授权 - 如何做到这一点取决于您使用的堆栈。

    其他选项是..

    1. 基于 HTTPS 的基本身份验证
    2. 2-legged OAuth

    不同的是,2-legged oauth 支持不可否认性,而基本身份验证不支持。

    无论您使用何种身份验证机制,您都可以使用 XACML 进行细粒度授权...

    【讨论】:

      【解决方案2】:

      您可以通过 https 使用 http 基本身份验证。它让后端应用程序知道用户,因此可以进行授权。

      此链接[1] 显示了我如何使用 WSO2 ESB 完成类似的操作。但是根据您的堆栈,可能有一种方法。

      [1]http://wso2.org/library/articles/2011/06/securing-web-service-integration

      【讨论】:

        【解决方案3】:

        我需要能够控制哪个应用程序正在调用我的网络 服务以及此应用程序是否有权调用它。

        我觉得您想要的是服务提供商方面的授权机制。

        如果您不想对您的soap 消息进行任何加密,您可以考虑为soap msg 添加新参数。例如客户端将<applicationId> and <password>(或加密的AppId, PassWord字符串)作为新参数发送给WS,在WS提供者端,WS检查应用程序是否有权调用。

        但这会带来客户端和服务实现的变化。

        或者您可以检查请求的客户端 IP,以确定它来自哪个应用程序。如果您的应用程序有固定的 IP 地址。

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 2015-12-05
          • 1970-01-01
          • 1970-01-01
          • 2015-11-22
          • 1970-01-01
          • 2020-09-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多