在RESTful Web服务中实现注销

时间:2016-05-12 13:21:30

标签: java web-services rest

我正在开发一个需要注销服务的移动应用程序。登录服务是通过从数据库验证完成的,现在我陷入了退出状态。

3 个答案:

答案 0 :(得分:10)

后退

您没有提供有关如何在您的应用程序中执行身份验证的许多详细信息,而且很难猜测您在做什么。

但是,需要注意的是,在REST应用程序中,服务器端不能存储会话状态。相反,会话状态必须完全由客户端处理

但是服务器端的会话有什么问题?他们是有状态的,他们打破了REST stateless constraint(继续阅读更多细节),因此它不是REST。

无状态约束

根据Roy T. Fielding的dissertation,REST stateless constraint定义如下:

  

5.1.3 Stateless

     

[...]从客户端到服务器的每个请求必须包含理解请求所需的所有信息,并且不能利用服务器上任何存储的上下文。因此,会话状态完全保留在客户端上。 [...]

例如,在访问需要身份验证的受保护资源时,每个请求都必须包含所有必要的数据才能正确验证/授权。身份验证数据应属于标准HTTP Authorization标头。来自RFC 7235

  

4.2. Authorization

     

Authorization标头字段允许用户代理进行身份验证   本身与原始服务器 - 通常,但不一定,后   收到401(未经授权)回复。它的价值包括   包含用户身份验证信息的凭据   被请求资源领域的代理。 [...]

结束

REST是无状态会话意义上没有登录或注销。针对需要身份验证的资源的每个请求都必须携带身份验证数据。并且会话状态保留在客户端而不是服务器中。

答案 1 :(得分:6)

您将需要两个Web服务,一个用于登录,另一个用于注销。在用户退出应用程序时,您需要调用注销服务。

详细说明,您必须在数据库中管理标志。当正确的用户名和密码通过登录Web服务传递时,该标志将为true。在注销服务上,您只需发送用户名并将标志更新为false。通过这种方式,如果您将移动设备的IMEI号码与用户名和密码一起发送到登录服务,您还可以防止多次登录。

答案 2 :(得分:3)

登录通常应该返回令牌或cookie(如果不是REST-full)。

注销时,令牌应该过期。

如果是cookie,那么首先你可以在服务器端使会话无效并删除客户端的cookie。

专门针对您的问题而不是布尔标志,您可以生成新的令牌(唯一随机)后登录并在新列中维护并期望连续请求中的相同令牌。 对于基本注销,您所要做的就是为该用户删除此令牌。