为了账号安全,请及时绑定邮箱和手机立即绑定

你能帮我理解吗?“常见的REST错误:与会话无关”

你能帮我理解吗?“常见的REST错误:与会话无关”

函数式编程 2020-02-04 14:41:43
免责声明:我是REST思想流派的新手,我正努力将其束缚在其中。因此,我正在阅读此页面Common REST Mistakes,我发现我对与会话无关的部分完全感到困惑。这就是页面上所说的:客户端无需“登录”或“启动连接”。HTTP验证在每条消息上自动完成。客户端应用程序是资源而不是服务的使用者。因此,没有什么可登录的!假设您正在通过REST Web服务预订航班。您不会为服务创建新的“会话”连接。而是您要求“行程创建者对象”为您创建一个新的行程。您可以开始填充空白,然后在网络上的其他位置获取一些完全不同的组件来填充其他空白。没有会话,因此在客户端之间迁移会话状态没有问题。也没有“会话亲缘关系”的问题好的,我知道每条消息都会自动完成HTTP身份验证-但是如何?用户名/密码是否随每个请求一起发送?那不是增加攻击表面积吗?我觉得我好像迷失了一部分。有一个REST服务(例如)/session接受GET请求是否会很糟糕,您将在其中传递用户名/密码作为请求的一部分,如果身份验证成功,则返回一个会话令牌,然后与后续请求一起传递?从REST的角度来看这是否有意义,还是缺少这一点?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

为了实现RESTful,每个HTTP请求应自行携带足够的信息,以便其接收者对其进行处理,以使其与HTTP的无状态本质完全协调一致。

好的,我知道每条消息都会自动完成HTTP身份验证-但是如何?

是的,用户名和密码随每个请求一起发送。这样做的常用方法是基本访问身份验证摘要访问身份验证。是的,窃听者可以捕获用户的凭据。因此,将使用传输层安全性(TLS)加密所有发送和接收的数据。

拥有一个接受GET请求的REST服务(例如,/ session)是否会很糟糕,您将在其中传递用户名/密码作为请求的一部分,如果身份验证成功,则返回一个会话令牌,这可能然后与后续请求一起传递?从REST的角度来看这是否有意义,还是缺少这一点?

因为它带有状态,所以它不是RESTful的,但是它很常见,因为它为用户提供了便利。用户不必每次都登录。

您在“会话令牌”中描述的内容通常称为登录cookie。例如,如果您尝试登录到Yahoo !!帐户中有一个复选框,上面写着“让我保持登录状态2周”。这实际上是(用您的话)说:“如果我成功登录,则使我的会话令牌存活2周。” Web浏览器将随您要求的每个HTTP请求一起发送此类登录cookie(可能还有其他)。


查看完整回答
反对 回复 2020-02-04
?
森林海

TA贡献2011条经验 获得超2个赞

REST服务要求对每个HTTP请求进行身份验证并不罕见。例如,Amazon S3要求每个请求都具有从用户凭证,要执行的确切请求以及当前时间派生的签名。该签名易于在客户端进行计算,可以由服务器快速验证,并且对于拦截该签名的攻击者使用有限(因为它基于当前时间)。


查看完整回答
反对 回复 2020-02-04
?
达令说

TA贡献1821条经验 获得超6个赞

许多人不太清楚REST原理,使用会话令牌并不意味着您总是有状态,每个请求发送用户名/密码的原因仅用于身份验证,并且用于发送令牌(通过登录生成)流程)只是为了确定客户端是否具有请求数据的权限,只有在使用用户名/密码或会话令牌来确定要显示的数据时,您才违反REST的要求!取而代之的是,您只能将它们用于衰弱(显示数据或不显示数据)

在您的情况下,我说是,这是RESTy,但请尝试避免在REST API中使用本机php会话,并开始生成自己的哈希令牌,这些令牌在确定的时间段内到期!


查看完整回答
反对 回复 2020-02-04
  • 3 回答
  • 0 关注
  • 472 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信