gpt4 book ai didi

ruby-on-rails - REST API : Do I need to authenticate log out action?

转载 作者:行者123 更新时间:2023-12-04 06:22:44 25 4
gpt4 key购买 nike

我正在编写一个 REST API 服务器(使用 Rails),这里有一个关于 的问题 session 管理 .

我认为对于 REST API 服务器,我们不需要为每个用户保存登录状态(或 session )。所以我只添加一个 身份验证 token 对于每个用户。如果他们登录,此服务器将返回此 token 给他们,如果注销,则销毁它。

我想知道是否有必要验证此 token 销毁操作?可能有一个恶意用户迭代所有可能的 token ( 也许!)并将它们包装在我服务器的 DELETE 请求中......

非常感谢!

最佳答案

Restful Web 服务的一个方面是无状态,如 Wikipedia 中所述。文章。

The client–server communication is further constrained by no client context being stored on the server between requests. Each request from any client contains all the information necessary to service the request, and session state is held in the client.



服务器不应该包含任何有关 session 的信息,这意味着每个请求中都必须包含身份验证信息,并且不需要登录或注销方法。

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

更新:

@Ekkehard,这正是我评论的意思。不应使用带有 session ID、cookie 和 session 超时的“有状态”http session , token 应由附加资源提供。

[...] no client context being stored on the server between requests.



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

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

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

Each request from any client contains all the information necessary to service the request, and session state is held in the client.



token 将根据存储在数据库中的信息从后端进行验证。

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

关于ruby-on-rails - REST API : Do I need to authenticate log out action?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32027577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com