加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – REST API:我是否需要验证注销操作?

发布时间:2020-12-17 02:48:44 所属栏目:百科 来源:网络整理
导读:我正在编写REST API服务器(使用Rails),这是一个关于会话管理的问题. 我认为对于REST API服务器,我们不需要为每个用户保存登录状态(或会话).所以我只为每个用户添加一个身份验证令牌.如果他们登录,则此服务器将向此返回此令牌,如果注销,则将其销毁. 而且我想
我正在编写REST API服务器(使用Rails),这是一个关于会话管理的问题.

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

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

非常感谢!

解决方法

宁静的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.

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

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

更新:

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

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

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

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

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

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

将根据存储在数据库中的信息从后端验证令牌.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读