首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST--定义--一旦提供用户授权,系统不是RESTful系统吗?

REST--定义--一旦提供用户授权,系统不是RESTful系统吗?
EN

Stack Overflow用户
提问于 2019-01-18 14:30:35
回答 1查看 32关注 0票数 1

我已经开始读一些关于RESTful系统的文章,并开始学习本论文。在第7-8页中,对RESTful系统有以下限制:

  • 它必须是一个客户机-服务器系统。
  • 它必须是无状态的-服务不应该需要保留用户的会话;换句话说,每个请求都应该独立于其他RESTful体系结构。
  • 它必须支持缓存系统??网络基础设施应该支持不同级别的缓存。
  • 它必须是统一可访问的-每个资源必须有一个唯一的地址和一个有效的接入点。
  • 它必须是分层的,它必须支持可伸缩性。
  • 它应该按需提供代码--尽管这是一个可选的约束,但通过允许按需下载代码,应用程序可以在运行时进行扩展,例如Java Applets。

现在有第2点说,不应该需要保留用户的会话。这意味着,每个提供登录系统的应用程序都不是RESTful系统(每个定义),因为我需要保留一个用户令牌,以便在API上作为允许访问该资源的用户进行身份验证。

然而,我无法想象每个RESTful系统都不支持任何安全标准,比如授权。我是否认为,或者是任何支持授权的系统,而不是RESTful系统。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-18 14:47:49

身份验证不需要有状态API。

作为一个稻草人的例子,考虑一个应用程序,它具有:

  • 包含硬编码用户名和密码的配置文件。
  • 一种请求格式,包括每个请求中的用户名和密码。
  • 逻辑,它在收到请求时运行,并将请求与配置文件进行比较。

这个系统可以在一个完全只读的系统上运行,根本不存储任何状态;但是,很明显,它有身份验证。

如果我们将用户名和密码移到数据库中,应用程序仍然是无状态的--它只需要读取数据库,而不是写入数据库。类似地,我们可以发送密码的散列加一个nonce,而不是纯文本密码,支持具有不同权限的多个用户,等等,而且我们还没有引入状态性。

如果引入了令牌系统(如OAuth ),用户只请求一次令牌,并将其用于后续请求,而不是发送完整的凭据,则可能会引入状态--存储有效令牌并对每个请求进行检查。但是,这并不一定是正确的--您可以生成一个自包含的令牌,用户可以用它在固定的时间内证明自己是谁,使用加密签名来阻止伪造,而不必在中央数据库中检查它;JWT (JSON Web令牌)就是这样工作的。重要的是,这不是会话令牌--用户应该可以使用相同的令牌或一系列新的令牌自由地执行一系列请求,而不会影响结果。

重要的一点是,请求的行为应仅取决于这一请求。有状态API将表示“产品#1将意味着不同的东西,取决于您提供的会话令牌”;或者“您必须在请求Y之前调用请求X,我们将跟踪您是否使用了会话令牌”。在无状态API中,您可能会说:“您必须提供一个有效的产品ID来请求Y,如何获得它取决于您自己,但是您可能会通过调用请求X获得它”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54256028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档