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

won*_*ng2 12 api rest

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

Der*_*k W 10

通常将通过HTTP 请求传递敏感数据视为不良做法GET.

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

为什么这是一个例外?浏览器历史记录和服务器日志将存储GET请求.这意味着这些敏感信息在两个地方都以纯文本形式显示.因此,如果某人得到了一个 - 那么这些信息现在掌握在他们手中.

您应该使用HTTP POST请求将此敏感信息传递给RESTful API,因为浏览器不会存储它们,服务器也不会记录它们.但是,第一道防线是使用安全HTTP(HTTPS)来确保此信息不受外部人员的影响.

因此,请将HTTP请求正文中的此信息传递给HTTPS URL.


abr*_*ham 8

一种好方法是对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"
}
Run Code Online (Sandbox Code Playgroud)


Car*_*ron 7

来自维基百科:

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

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

在SO中查看此讨论,它将这个概念付诸实践.