在内部专用网络上保护SOAP Web服务的最佳方法是什么?

时间:2011-09-19 08:30:08

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

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

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

我的需要是能够控制哪个应用程序正在调用我的Web服务,并且此应用程序是否有权调用它。

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

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:2)

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

所以你需要继续保持传输级别的安全性。

即使使用双向SSL,您也可以根据用户证书的指纹授权用户 - 如何执行此操作取决于您使用的堆栈。

其他选择是..

  1. 基于HTTPS的基本身份验证
  2. 双腿OAuth
  3. 不同之处在于,双腿oauth支持不可否认性,而基本身份验证则不支持。

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

答案 1 :(得分:1)

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

此链接[1]显示了我如何使用WSO2 ESB完成类似的操作。但是根据你的筹码,可能有办法。

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

答案 2 :(得分:0)

  

我的需求是能够控制哪个应用程序正在调用我的网络   服务,此应用程序被授权调用它。

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

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

但这会带来对客户端和服务实现的更改。

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