REST API:我是否需要validation注销操作?

我正在编写REST API服务器(使用Rails),这是一个关于会话管理的问题。

我认为对于REST API服务器,我们不需要为每个用户保存登录状态(或会话 )。 所以我只为每个用户添加一个身份validation令牌 。 如果他们登录,则此服务器将向此返回此令牌,如果注销,则将其销毁。

而且我想知道是否有必要validation此令牌销毁操作? 可能有恶意用户迭代所有可能的令牌( 可能! )并将它们包装在DELETE请求中给我的服务器…

非常感谢!

宁静的Web服务的一个方面是维基百科文章中描述的无状态。

客户端 – 服务器通信进一步受到请求之间没有客户端上下文存储在服务器上的约束。 来自任何客户端的每个请求都包含服务请求所需的所有信息,并且会话状态保存在客户端中。

服务器不应包含任何有关会话的信息,也就是说,每个请求中都必须包含身份validation信息,并且不需要登录或注销方法。

最佳实践是提供一种资源(如某些OAuth2实现),它返回具有特殊范围和到期时间的令牌。 在创建过程中,令牌应存储在后端的数据库中。 令牌过期后,必须从数据库中删除信息,客户端必须获取令牌的新副本。

更新:

@Ekkehard,这正是我对评论的意思。 代替使用具有会话ID,cookie和会话超时的有状态’http会话,该令牌应由另外的资源提供。

[…]请求之间没有客户端上下文存储在服务器上。

如果客户端想要访问后端的特殊服务,则必须向令牌资源发送POST请求(后端在数据库中存储具有特殊到期时间的新令牌)。

在POST请求中,客户端还可以提供额外的查询参数范围,以创建令牌,只允许您访问后端的特殊部分(例如,Google提供了许多不同的API,如Google云端硬盘,Google Mail等。如果客户端是邮件应用程序,则只需要访问Google Mail。这是一个额外的安全function。)。

响应返回令牌,客户端必须在每个请求的标头中将此令牌添加到其他资源。

来自任何客户端的每个请求都包含服务请求所需的所有信息,并且会话状态保存在客户端中。

将根据存储在数据库中的信息从后端validation令牌。

令牌资源还可以提供DELETE http方法,以允许用户在到期时间结束之前删除现有令牌。 到期超时后,令牌将自动从后端数据库中删除。

RESTful应用程序必须是无状态的,并且需要使用标头Authorization在每个请求中发送安全令牌。 此类安全令牌是使用凭据或使用OAuth2身份validation流从授权服务器获取的(有关详细信息,请参阅此链接http://www.bubblecode.net/en/2013/03/10/understanding-oauth2/ )。 此类令牌具有到期日期或可以从此服务器无效。

此链接还可以提供有关在RESTful应用程序中使用令牌的方式的更多提示:

  • 使用令牌为RESTful应用程序实现身份validation : https : //templth.wordpress.com/2015/01/05/implementing-authentication-with-tokens-for-restful-applications/

希望它对你有帮助,蒂埃里

如果有人知道您的令牌,那么他们可以使用它来进行身份validation。 换句话说,通过将令牌发送到删除,您正在validation自己。 DELETE操作中不需要令牌之外的其他凭据。

有太多可能的令牌迭代,因为这是一个似是而非的攻击。 你担心的攻击并不是DELETE独有的。 如果用户可以遍历所有令牌,那么他们就可以冒充任何用户进行任何操作。

您可以将身份validation令牌用于API。 如果您的用户名和密码匹配,概念很简单,您只需创建一个令牌并发送给用户即可。

您需要为此令牌设置到期时间。

在到期时间或API请求销毁后,您只需删除此令牌。

必须随每个请求发送令牌。

在这种方法中,您不需要任何会话。

Interesting Posts