RESTful服务身份验证

时间:2012-02-08 21:31:04

标签: authentication rest spring-mvc authorization restful-authentication

根据REST规范,该服务应该是无状态的;但是后来很难启用身份验证。我读过的一些内容说“让REST成为有状态并不是世界末日”。但这不是重点,重点是遵循规范并保持一致。

所以,我在这里问这个问题,希望有人可以指导我朝着正确的方向前进。我正在使用Spring MVC来创建REST服务。我没有意见。它是一个真正的REST服务,它使用/生成JSON。我需要为此应用程序提供无状态的身份验证(以及授权),并遵循REST规范。客户端将使用JavaScript(Backbone.js,CoffeeScript)编写,并将接受用户的用户名/密码。然后它会将该信息发布到服务器。

如何在基于Spring的应用程序中实现真正的无状态身份验证(和授权)?

通过SSL进行摘要式身份验证 - 这是要走的路吗?

3 个答案:

答案 0 :(得分:2)

会话管理与州管理不同。

握手期间服务器端可以生成令牌,每次客户端进行呼叫时,都必须将该令牌添加到头部,或者服务器能够分析的位置,并决定是否允许呼叫继续。

服务器不需要维护任何状态来检查可以使用某种算法完成的该令牌的有效性。

答案 1 :(得分:2)

您是否了解过Spring Security的工作原理?使用Spring Security我已经能够在REST请求中从客户端添加自定义HTTP授权头。这是提取服务器端,请求用户经过身份验证,并且可以授权访问特定资源。

答案 2 :(得分:1)

您可以使用基于SSL的基本身份验证或摘要身份验证,这两种身份验证都不会暗示有关状态的任何重要信息。服务器可能还会发送一个cookie,当客户端发出进一步请求时,客户端需要将其发送回来(我相信 Javascript代码将为您处理所有这些)。还有其他认证机制可能,但它们更复杂,不一定合适。 (另一个正确无关的密钥是客户端认证的SSL,但这需要浏览器安装客户端SSL密钥对,并且服务器要知道该标识的含义,并且部署起来要复杂得多。)

在服务器端,使用Spring Security可以很容易地处理所有这些内容。它适用于Spring MVC。