REST HTTP身份validation – 如何?
所以,我正在使用RESTeasy和Google App Engine开发REST Web服务。 我的问题与GAE没有关系,但我提到它只是为了重要。 事实上,我需要保护我的资源和我自己的用户(不是谷歌的)。
保护REST Web服务似乎是一个非常有争议的主题,或者至少是一个非常“自由”的主题。 REST没有对此事项施加任何标准。 根据我在网络和文献上的研究,我认为至少有3种方法可能适用于我的应用程序:
- HTTP Basic (使用SSL)
- HTTP摘要 (使用SSL)
- OAuth的
OAuth似乎是最完整的方法。 但我不认为需要这么复杂,因为我不需要授权任何第三方应用程序。 它是仅由我自己的客户端应用程序使用的Web服务。
HTTP Basic和HTTP Digest在Web上显示为最简单的,但事实是我从未使用RESTeasy找到它们的具体实现,例如。 我在RESTeasy的文档中找到了这个页面和这个页面 。 它们确实非常有趣,但它们对此主题(HTTP Basic或Digest)几乎没有任何说明。
所以,我在这里问:
如何使用RESTeasy中的HTTP Basic或Digest保护我的WebService?
也许它很简单,在文档或其他任何地方都不值得一提? 此外,如果有人能够就保护RESTful Web服务的问题向我提供一些见解,那么它可能会有所帮助。
我选择了正确的方法吗?
保护REST API的最简单方法是使用SSL上的HTTP基本身份validation。 由于标头是加密的,因此使用摘要没有多大意义。 只要您可以在客户端上保持密码安全,这应该很有用。
我已经设法通过使用RESTeasy的拦截器来实现这一目标。 基本上,请求是通过使用像类这样的监听器来截获的。 在这个类中,我检查请求的HTTP头,然后继续正常的Basic-Auth过程。
有用的链接:
http://en.wikipedia.org/wiki/Basic_access_authentication
使用REST API传递消息头中的参数
http://www.alemoi.com/dev/httpaccess/(Servlet部分)
我希望这可以帮助任何人。
谢谢。
使用任何没有SSL的身份validation方法时,您肯定会面临安全风险。
但如果你确实使用了SSL,那么你通常会遇到性能不佳的问题。
Oauth实际上是一种允许第三方获取对您的Web服务的访问权限的解决方案。
由于选择有限,我对需要身份validation的当前Web服务的解决方案使用了SSL + basic的组合
您可以考虑使用OAuth 2 。 它比OAuth 1简单得多,并且被Facebook和Google主动用于大型REST API。