如何设计RESTful API来检查用户';谁的证件?

如何设计RESTful API来检查用户';谁的证件?,rest,restapi,Rest,Restapi,我正在为一个移动应用程序设计一个API,我希望它保持RESTful。 API使用基本HTTP认证进行授权,但是,当用户第一次打开应用程序时,他需要首先登录,因此我需要设计一个API来检查用户的凭据,它将接受一对用户名和密码,并相应地返回成功或失败。 问题是url应该是什么,所以它是restful的?我认为/login不是一个好方法。一个好方法是对当前用户的帐户/配置文件信息执行GET请求。并让它返回用户名、设置、化身url等。me是身份验证用户的常用速记标识符 GET https://api.e

我正在为一个移动应用程序设计一个API,我希望它保持RESTful。
API使用基本HTTP认证进行授权,但是,当用户第一次打开应用程序时,他需要首先登录,因此我需要设计一个API来检查用户的凭据,它将接受一对用户名和密码,并相应地返回成功或失败。

问题是url应该是什么,所以它是restful的?我认为/login不是一个好方法。

一个好方法是对当前用户的帐户/配置文件信息执行
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"
}
来自维基百科:

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

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


检查,它明确了这个概念。

我同意Carlos的观点-在正常的restful API中,没有会话,因此您无法进行一次身份验证,然后重新使用会话,您实际上需要在每次调用时传递凭据集(不理想)

在这个场景中,听起来您最好使用一个openAuth(http://www.oAuth.net)-这是通过在应用程序首次运行时进行身份验证,然后生成一个访问令牌,以允许在每次呼叫中访问(+刷新令牌)


(您可能会争辩说,访问令牌是一种状态——它是一种状态——但是,至少它的寿命通常要长得多)。

通过HTTP
GET
请求传递敏感数据通常被视为一种不良做法

密码信息是敏感数据,是违反应
GET
请求规则的例外情况之一

为什么这是一个例外?浏览器历史记录和服务器日志将存储
GET
请求。这意味着此敏感信息在两个位置都以纯文本形式可见。因此,如果有人掌握了其中任何一项,那么这些信息现在就掌握在他们手中

您应该使用HTTP
POST
请求将这些敏感信息传递给restfulapi,因为浏览器不会存储这些信息,服务器也不会记录它们。然而,第一道防线是使用安全的HTTP(HTTPS)来确保这些信息受到保护,不被外人发现


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

GEThttps://api.example.com/auth


设置了授权标头。

是的,我会在每次通话中传递凭据集,但是,当用户第一次打开应用程序时,我确实需要登录来检查用户的凭据,我没有保存会话cookie或类似的东西好吧,所以我想你一定是在每次通话中都传递了凭据用户名/密码,对吗。您需要始终通过它,或者通过一次并跟踪会话。