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