【问题标题】:How is user authentication done in a RESTful API?如何在 RESTful API 中完成用户身份验证?
【发布时间】:2012-10-04 14:36:18
【问题描述】:

我正在尝试使用Recess 开发一个简单的Web 服务,这是一个旨在易于使用且本质上是RESTful 的Web 框架。我发现在 Recess 中使用 CRUD 功能非常容易。我在 MySQL 数据库中创建了一个带有后端的模型,发现已经可以使用 REST API。

这很好,但问题是我没有用户身份验证,这几乎使我上面描述的非常好的功能完全无用。在现实世界的应用程序中,访问特定于用户的资源需要身份验证。例如,假设我正在开发一个简单的“待办事项”应用程序(顺便说一句,我不是)。用户对其待办事项列表中的其他人不感兴趣,因此服务需要识别用户是谁,以便提供正确的数据。此外,不应允许用户读取、删除或更新其他人的资源。

这通常通过登录系统完成。但是对于 REST API,用户如何进行身份验证?每次发出请求时,客户端是否需要提供用户的凭据(如用户名和密码)?怎么能避免呢?通常,可以使用 cookie,但这可能不是一种好的做法,因为并非所有客户端都必须是 Web 浏览器。但是如果我们要模拟 cookie 的功能,我们如何传输“cookie”的内容(通常,这是在 HTTP 标头中完成的)?最后,如何将这些问题的解决方案集成到 Recess 的内置 REST 功能中?

如您所见,我对开发 REST API 还很陌生,因此欢迎任何建议和指点。

【问题讨论】:

    标签: php rest authentication recess


    【解决方案1】:

    RESTful 系统利用现有的现有技术,而不是重新实现它们。由于 HTTP 已经包含 Basic Authentication 形式的身份验证支持,因此您应该重新使用它。这是一种得到广泛支持的客户端传输凭据的机制。

    是的,客户端应该在每个请求中发送他们的凭据。 Cookies 适用于不喜欢重复输入密码的人类客户,这里不是这种情况。 Cookie 意味着您的服务器上的会话状态,这会使可扩展性变得非常困难。

    这个网站上可能有一百个关于 RESTful 身份验证的问题。我鼓励您搜索并阅读更受欢迎的内容。

    【讨论】:

    • 听起来像是一个计划。但是,如果我正在制作一个 Javascript Web 应用程序来访问 RESTful 后端怎么办:将用户的凭据保存在方便用于请求的地方是不是不好的做法?如果页面发生变化,我应该将凭据保存在本地存储中吗?当我在开发桌面/移动应用程序时无法控制时,有没有更好的方法?
    • 您始终可以对他们的凭据进行加盐和哈希处理,这样您就不会存储/传递明文密码。使用 SHA-256 之类的东西,你的状态就会很好。
    猜你喜欢
    • 2011-11-28
    • 2013-08-21
    • 2013-04-07
    • 1970-01-01
    • 2011-10-02
    • 2014-11-15
    • 1970-01-01
    • 2015-11-24
    • 2012-01-11
    相关资源
    最近更新 更多