如何设计一个RESTful API来检查用户的凭据?

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


一个好方法是对当前用户的帐户/配置文件信息执行GET请求。 并让它返回用户名,设置,头像网址等。 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"
}

通常认为通过HTTP GET请求传递敏感数据的做法很差。

密码信息是敏感数据,是打破幂等操作应为GET请求的规则之一。

为什么这是一个例外? 浏览器历史记录和服务器日志将存储GET请求。 这意味着这两个地方的敏感信息在纯文本中都是可见的。 所以,如果有人得到任何一个 - 那么这些信息现在掌握在他们手中。

您应该使用HTTP POST请求将此敏感信息传递给RESTful API,因为浏览器不会存储它们,并且服务器不会记录它们。 但是,第一道防线是使用安全HTTP(HTTPS)来确保这些信息不受外界的干扰。

因此,请将此信息传递给HTTP请求的正文以传送到HTTPS网址。


从维基百科:

客户端 - 服务器之间的通信进一步受限于在请求之间没有客户端上下文存储在服务器上。 来自任何客户端的每个请求都包含为请求提供服务所需的所有信息,并且任何会话状态都保存在客户端中。

由于服务器不存储来自客户端的会话状态,因此您的API 不应公开任何登录/注销功能 :在每个请求中,您应发送用户凭证,并且服务器应每次验证它们。

在SO中检查这个讨论,它克服了这个概念。

链接地址: http://www.djcxy.com/p/41139.html

上一篇: How to design a RESTful API to check for user's credentials?

下一篇: How do I make my Web Application stateless yet still do something useful?