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

时间:2012-04-13 16:57:03

标签: api rest

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

5 个答案:

答案 0 :(得分:10)

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

密码信息是敏感数据,是违反idempotent operations应该GET请求的规则的例外之一。

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

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

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

答案 1 :(得分:7)

来自维基百科:

  

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

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

检查this discussion in SO,它将此概念付诸实践。

答案 2 :(得分:6)

一种好方法是对当前用户的帐户/个人资料信息执行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"
}

答案 3 :(得分:0)

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

在这种情况下,听起来你最好使用openAuth(http://www.oAuth.net)之一 - 这可以通过在首次运行应用程序时进行身份验证,然后生成访问令牌以允许访问在每次通话中(+刷新令牌)。

(你可能会认为访问令牌是状态 - 它有点 - 但是,至少它通常显着更长寿命。)

答案 4 :(得分:0)

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

设置了Authorization标头。

相关问题