如何设计一个RESTful API来检查用户的凭据?(How to design a RESTful

2019-07-28 23:18发布

我设计一个API,用于移动应用,并希望保持它的RESTful。
API的使用授权基本HTTP验证,但是,当用户打开应用程序的第一次,他需要先登录,所以我需要设计一个API来检查用户的凭证,这将接受一个对用户名和密码,返回成功或失败的相应。
问题是URL应该是什么,所以它是宁静? 我不认为/登录是一个很好的一个。

Answer 1:

一个好的方法是执行GET当前用户的账号/个人资料信息的请求。 并将它返回用户名,设置头像URL等。 me是一个经常被用作验证用户的简写标识。

GET https://api.example.com/profiles/me
HTTP/1.1 200 OK
{
  "username": "bob",
  "id": "xyz",
  "created_at": 123,
  "image_url": "https://example.com/bob.png"
}


Answer 2:

它通常被视为实践差通过HTTP来传递敏感数据 GET请求。

密码信息是敏感数据,并打破该规则的例外情况之一幂等操作应GET请求。

为什么这是一个例外? 浏览器历史记录和服务器日志将存储GET请求。 这意味着这一敏感信息是分别在两地的纯文本可见。 所以,如果有人得到的每一个保持 - 然后将这些信息现在在自己手中。

您应该使用一个HTTP POST请求,这个敏感的信息传递给REST的API的浏览器不会存储它们,服务器将无法登录他们。 然而,防御的第一线是使用安全HTTP(HTTPS),以确保这些信息是从外部保护。

所以传递一个HTTP请求到HTTPS URL的身体信息。



Answer 3:

维基百科:

客户端 - 服务器通信是通过无客户端上下文被存储请求之间的服务器上进一步限制。 从任何客户端的每个请求包含了所有的服务请求所必需的信息,和任何会话状态中的客户端。

由于服务器存储从客户端没有会话状态,你的API 应该不会暴露任何登录/注销功能 :在每一个要求,你应该发送用户凭据,服务器应该每次都验证它们。

检查中所以这个讨论中 ,它claryfies这个概念。



Answer 4:

我同意卡洛斯 - 在正常的RESTful API,因此没有会​​话,所以你无法验证一次,然后重用会话,你实际上需要通过在每次调用(不理想)的凭据集。

在这种情况下,它听起来就像你会使用openAuth(http://www.oAuth.net)之一的更好 - 这是通过验证时,应用程序第一次运行,然后生成一个访问令牌,让每一个电话内访问(+刷新令牌)。

(你可能会说,访问令牌是状态 - 这是的的确是 - 不过,至少它通常是显著寿命更长)。



Answer 5:

GET https://api.example.com/auth

随着Authorization头集。



文章来源: How to design a RESTful API to check for user's credentials?
标签: api rest