API REST 中 URL 登录的可接受做法是什么?

问题描述 投票:0回答:2

如果我有:用户,并且我需要使用 API Rest 登录。最好的方法是什么?

  1. /users/id/password

  2. /users?id=id&password=pass

如果我使用第二个选项,我将需要验证是否有获取参数。如果没有,它将返回所有结果。

这不是我现在想要的答案: REST API 登录模式

rest url api-design
2个回答
5
投票

您添加的链接是有效的,REST API 是无状态的,因此无法以传统方式登录,您必须将客户端会话存储在客户端。如果您使用 HTTPs,则无需登录。如果不这样做,那么您的 API 将不安全,因此使用密码不会有任何保护。我想就这些了。

如果您想保持无状态并发送令牌,那么您必须在服务器上签署例如用户 ID。因此,在下一个请求时,您可以发送用户 ID 和签名,而不是电子邮件和密码。这样服务器就会知道您之前已经登录过该用户 ID 所属的帐户。我不建议您使用 URI 发送敏感数据。最好将请求正文与 POST 一起使用。 URI 结构取决于你的喜好,我会使用这样的东西:

POST /users/1/tokens/ {email: "..", password: ".."}
201 {id: 1, expires: "..", signature: ".."}

请注意,您必须发送您签名的每个变量,因此,id、过期时间(由服务器添加)、可能是 ip 地址、随机数等...您不得在服务器上存储任何内容(包括令牌),否则通信将是有状态的。

我不是安全专家,但我认为这个解决方案在大多数情况下没有意义,所以你需要以某种方式证明为什么你的 API 需要它。例如,它用于签署来自第 3 方客户端的每个请求。如果您无法证明这一点,我建议您使用默认方法,即使用 HTTPS,在客户端登录并在每个请求时发送带有电子邮件和密码的 HTTP 授权标头。


4
投票

我将使用 POST 方法,并在有效负载中提供登录名/密码:

POST /login
Content-Type: application/json

{ username: 'some username', password: 'some password' }

此外,以下链接可以为您提供有关 RESTful 服务中身份验证的一些提示:

希望对您有帮助, 蒂埃里

© www.soinside.com 2019 - 2024. All rights reserved.