REST API登录模式是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

我创建了一个REST api,严格遵循apigee建议,使用名词而不是动词,将api版本烘焙到url中,每个集合使用两个api路径,GET POST PUT DELETE用法等。

我正在登录系统上工作,但不确定正确的REST登录用户的方式。在这一点上,我不是在处理安全问题,只是登录模式或流程。(稍后我们将添加2步oAuth,以及HMAC等)

可能的选项

  • 一个类似POST的东西 https://api...com/v1/login.json
  • PUT到类似的东西 https://api...com/v1/users.json
  • 我没有经历的事情...

登录用户的适当REST风格是什么?

提问于
用户回答回答于

Roy T. Fielding和Richard N. Taylor对现代Web架构的原则设计(即来自所有REST术语的作品序列)都包含客户端 - 服务器交互的定义:

所有REST交互都是无状态的。也就是说,每个请求都包含连接器理解请求所需的所有信息,而不管可能发生在其之前的任何请求

这个限制完成了四个功能,第一个和第三个在这个特殊情况下很重要:

  • 第一:它不需要连接器在请求之间保持应用程序状态,从而减少物理资源的消耗并提高可伸缩性;
  • 第三:它允许中介单独查看和理解请求,当服务动态重新安排时这可能是必要的;

现在让我们回到你的安全案例。每个请求都应该包含所有必需的信息,授权/认证也不例外。如何实现这一目标?每次请求都会通过电线直接发送所有必需的信息。

实际上这意味着将当前消息的哈希码添加到每个请求。散列码由密码散列函数结合秘密密钥计算加密散列函数是预定义的或者是按需代码 REST概念的一部分(例如JavaScript)。秘密密钥 应由服务器提供给客户端作为资源,客户端使用它来计算每个请求的哈希码。

它在实践中如何运作

如果客户知道密钥,那么就可以使用资源。否则,他将被临时重定向(状态码307临时重定向)以授权并获得密钥,然后重定向回原始资源。在这种情况下,不需要事先知道(即,硬编码)什么URL来授权客户端,并且可以随时调整这个模式。

用户回答回答于

TL;每个请求的DR登录不是实现API安全所需的组件,身份验证是。

一般不谈论安全性就很难回答你关于登录的问题。有了一些认证方案,就没有传统的登录方式。

REST并未规定任何安全规则,但实际中最常见的实现方式是具有三向身份验证的OAuth(如您在问题中所述)。没有登录本身,至少没有每个API请求。使用3向验证,您只需使用令牌。

  1. 用户批准API客户端并授予以长寿命令牌形式发出请求的权限
  2. Api客户端通过使用长寿命的客户端来获取短暂的令牌。
  3. Api客户端发送每个请求的短暂标记。

该方案使用户可以随时撤销访问权限。几乎所有公开的RESTful API我都看过使用OAuth来实现这一点。

我只是不认为你应该根据登录的方式来解决你的问题(和问题),而是考虑一般保护API。

扫码关注云+社区