我已经开始读一些关于RESTful系统的文章,并开始学习本论文。在第7-8页中,对RESTful系统有以下限制:
现在有第2点说,不应该需要保留用户的会话。这意味着,每个提供登录系统的应用程序都不是RESTful系统(每个定义),因为我需要保留一个用户令牌,以便在API上作为允许访问该资源的用户进行身份验证。
然而,我无法想象每个RESTful系统都不支持任何安全标准,比如授权。我是否认为,或者是任何支持授权的系统,而不是RESTful系统。
发布于 2019-01-18 14:47:49
身份验证不需要有状态API。
作为一个稻草人的例子,考虑一个应用程序,它具有:
这个系统可以在一个完全只读的系统上运行,根本不存储任何状态;但是,很明显,它有身份验证。
如果我们将用户名和密码移到数据库中,应用程序仍然是无状态的--它只需要读取数据库,而不是写入数据库。类似地,我们可以发送密码的散列加一个nonce,而不是纯文本密码,支持具有不同权限的多个用户,等等,而且我们还没有引入状态性。
如果引入了令牌系统(如OAuth ),用户只请求一次令牌,并将其用于后续请求,而不是发送完整的凭据,则可能会引入状态--存储有效令牌并对每个请求进行检查。但是,这并不一定是正确的--您可以生成一个自包含的令牌,用户可以用它在固定的时间内证明自己是谁,使用加密签名来阻止伪造,而不必在中央数据库中检查它;JWT (JSON Web令牌)就是这样工作的。重要的是,这不是会话令牌--用户应该可以使用相同的令牌或一系列新的令牌自由地执行一系列请求,而不会影响结果。
重要的一点是,请求的行为应仅取决于这一请求。有状态API将表示“产品#1将意味着不同的东西,取决于您提供的会话令牌”;或者“您必须在请求Y之前调用请求X,我们将跟踪您是否使用了会话令牌”。在无状态API中,您可能会说:“您必须提供一个有效的产品ID来请求Y,如何获得它取决于您自己,但是您可能会通过调用请求X获得它”。
https://stackoverflow.com/questions/54256028
复制相似问题