我正在为移动应用程序设计一个API,并且我希望将它保持为RESTful。
API的授权使用Basic HTTP Auth,但是,当用户第一次打开应用程序时,他需要先登录,所以我需要设计一个API来检查用户的凭据,它将接受一对用户名和密码密码,返回成功或相应失败。
问题是什么网址应该是这样,它是宁静的?我不认为/登录是一个好的。如何设计一个RESTful 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"
}
维基百科:
的客户机 - 服务器通信由没有客户 上下文进一步限制被存储请求之间的服务器上。来自 的每个请求都包含为服务 请求所需的所有信息,并且任何会话状态都保留在客户端中。
因为服务器存储从客户端没有会话状态,你的API 应该不会暴露任何登录/注销功能:在每一个要求,你应该发送用户凭据,服务器应该每次都验证它们。
检查this discussion in SO,它克服了这个概念。
我同意卡洛斯 - 在一个正常的宁静的API中,没有会话,所以你不能验证一次然后重新使用会话,你实际上需要在每次调用时都传递凭据集(不理想)。
在这种情况下,它听起来像你会更好地使用openAuth(http://www.oAuth.net)之一 - 这是通过验证应用程序第一次运行时的身份验证,然后生成访问令牌以允许在每次通话中访问(+刷新令牌)。
(你可能会认为访问令牌是状态 - 它的类型 - 但是,至少它通常会长得多)。
它通常被认为是不好的做法,通过HTTP GET
请求通过敏感数据。
密码信息是敏感数据,是破坏idempotent operations应该是GET
请求的规则之一。
为什么这是一个例外?浏览器历史记录和服务器日志将存储GET
请求。这意味着这两个地方的敏感信息在纯文本中都是可见的。所以,如果有人得到任何一个 - 那么这些信息现在掌握在他们手中。
您应该使用HTTP POST
请求将此敏感信息传递给RESTful API,因为浏览器不会存储它们,并且服务器不会记录它们。但是,第一道防线是使用安全HTTP(HTTPS)来确保这些信息不受外界的干扰。
因此,将此信息通过HTTP请求的正文传递给HTTPS URL。
GET https://api.example.com/auth
随着授权报头组。
- 1. RESTful API的设计
- 2. 在RESTful API中检查用户权限
- 3. 如何设计一个RESTful API,用于媒体分析引擎
- 4. RESTful URI设计
- 5. RESTful认证API设计
- 6. RESTful应用程序的Java API设计
- 7. 如何使用RESTFul方式设计计算API?
- 8. RESTful路由设计
- 9. 设计RESTful URI
- 10. 用于用户数据的RESTful API
- 11. 使用用户凭据访问sharepoint api
- 12. 如何最好地设计用于启动操作的RESTful API
- 13. 跨多个用户的RESTful API
- 14. Twitter4j:如何从用户获取凭据后检查Twitter帐户是否存在?
- 15. 设计一个GUI来检查MatLab中的MRI堆栈
- 16. 这是一个很好的设计来检查用户对数据层的访问权限吗?
- 17. 从Active Directory检索用户凭据
- 18. 如何创建一个RESTful计算器?
- 19. 安全地向RESTFUL API提供凭证
- 20. RESTful兼容设计
- 21. 我如何设置OAuth流来获取用户AWS凭证
- 22. 如何使用活动目录和红宝石脚本检查用户凭据
- 23. PHP - 在页面重新加载后检查用户凭据
- 24. RESTful API运行时可发现性/ HATEOAS客户端设计
- 25. 发送复杂的数据到Restful Web服务 - API设计
- 26. RESTful URL设计 - 如何使用OR参数查询
- 27. 无法查询restful api来检索json对象
- 28. 如何设置访问webservice的用户凭据
- 29. 如何设置VirtualDirectory凭据
- 30. Rails 3 RESTful设计首选?
是的,我在每次通话时都通过了凭证设定,但是我确实需要登录才能检查用户的凭证,当他们第一次打开应用程序 – wong2 2012-04-14 08:45:01
时,我没有保留会话cookie或任何类似 – wong2 2012-04-20 12:55:57
好的 - 所以我想你必须通过凭证*用户名/密码*每个电话是正确的。你要么总是要传递它,要么传递一次会话。 – steve 2012-05-28 20:51:53