Spring Restful Web 服务的安全性
Posted
技术标签:
【中文标题】Spring Restful Web 服务的安全性【英文标题】:Security for Spring Restful Web Services 【发布时间】:2012-01-21 23:51:24 【问题描述】:我正在编写一个 Spring Restful Web 服务项目。我需要编写安全的 Web 服务。对于安全性,我已经在使用 Spring Security+SSL,但是现在我需要一些 security 来进行 加密和消息签名。我知道如何从代码中加密消息,但是我正在寻找一种机制来启用自动加密/解密和消息签名。
我一直在寻找不同的安全替代方案,包括 spring WSS 和其他,但其中大多数是针对 SOAP 的。有人可以建议我一些更好的安全机制和相同的链接。
【问题讨论】:
也许我遗漏了一些东西,但是使用 SSL 有什么问题?这将加密请求/响应在服务器和客户端之间对 Web 服务的传输。 感谢 maple,您使用 SSL 是对的。但是,在安全方面还有什么其他的东西,你可以建议我让它成为一个更安全的网络服务。 【参考方案1】:有多种方法可以保护您的 RESTful Web 服务,不幸的是,有许多链接提供了保护 Soap Web 服务的信息,但是随着 RESTful 越来越受欢迎,找到一种方法来保护并找到一种方法是非常必要的管理您的 RESTful Web 服务的会话。 因此,为了保护我的 Spring MVC 的安全支持,您至少需要考虑三个方面
1) 身份验证。 -- 对于身份验证,可以使用 Spring Security。 2) 授权。 -- 可以使用 OAuth 来授权请求。 3) 确保通信安全。 -- SSL 可用于保护通信通道。 4) 加密——再次Oauth可以解决目的 5) 消息签名。 -- 再次Oauth可以解决目的
因此,可以使用 spring security + OAuth 来保护一个安静的 web 服务。可以使用的其他安全机制是 Http Basic Security 和 Digest Security。
这是一个很好的例子,用 spring security 保护 spring restful webservice: http://java.dzone.com/articles/securing-restful-web-service
还可以将 Spring Security 与 OAuth 结合使用,您可以按照本教程进行操作:
Spring security with OAuth
【讨论】:
【参考方案2】:您基本上有两种 REST 安全模式:
在应用程序级别对请求/响应进行加密和签名并运行 通过 HTTP。这涉及到您需要的大量工作 在签名之前规范化所有数据并确保客户端/服务器 遵循完全相同的过程。这种方法在早期被采用 亚马逊网络服务协议的版本。
使用 SSL(可能带有客户端证书)。这是首选 方法,因为没有必要重新发明***。 SSL 加速器 可用,性能将明显优于 处理加密并登录您的代码。
亚马逊现在已经开始使用 SSL,您也应该这样做。 This article 很好地比较了这两种方法。
REST 与 SOAP
您提到了 SOAP 和 WS-Security,它们定义了用于在消息(而不是传输)级别进行加密和签名的协议。 WS-Security 定义这种协议的原因是为了通过代理 SOA 架构提供端到端的机密性、完整性和真实性。例如,您可以通过 CD 和 E 将 SOAP 消息从服务 A 发送到服务 B。SSL/TLS 在传输级别工作,因此只会保护 A 和 B 之间的消息。但是 REST 不适用于代理架构所以这种方法不适用于您的情况。
【讨论】:
感谢托比,但我正在寻找一个完整的安全包。 没有“完整的安全包”之类的东西,您需要评估自己应用程序中的漏洞。然后,您需要进行风险评估,以确定您是否准备好接受风险或采取措施减轻风险。没有任何软件包可以为您做到这一点以上是关于Spring Restful Web 服务的安全性的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Security 在 Web 应用程序和 RESTful 服务之间共享安全上下文
使用 Jersey 和 Spring Security 实现 RESTful Web 服务