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

时间:2015-11-26 13:00:03

标签: api rest url web

如果我有:用户,我需要使用api rest登录。最好的方法是什么?

1 / users / id / password

2 / users?id = id& password = pass

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

这不是我现在想要的答案: REST API Login Pattern

2 个答案:

答案 0 :(得分:4)

您添加的链接有效,REST API无状态,因此无法以传统方式登录,您必须在客户端存储客户端会话。如果您使用HTTP,则无法登录。如果你没有,那么你的API就不会安全,所以使用密码不会有任何保护。我认为这就是全部。

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

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

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

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

答案 1 :(得分:3)

我会使用POST方法和有效负载中提供的登录名/密码:

POST /login
Content-Type: application/json

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

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

希望它可以帮到你, 亨利