2012-10-04 37 views
0

我想开发一个简单的网络服务,使用Recess,这是一个Web框架,旨在简单易用并且本质上是RESTful。我发现在Recess中使用CRUD功能非常简单。我在MySQL数据库中创建了一个后端模型,并发现REST API已经可以使用。如何在RESTful API中完成用户身份验证?

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

这通常通过登录系统完成。但是对于REST API,用户如何验证?客户是否需要在每次提出请求时提供用户的凭证(如用户名和密码)?这怎么可以避免?通常情况下,可以使用cookie,但这可能不是一种好的做法,因为并非所有的客户端都必须是网络浏览器。但是,如果我们要模仿cookies的功能,我们如何传输“cookies”内容(通常,这是在HTTP标头中完成的)?最后,我如何在Recess的内置REST功能中集成这些问题的解决方案?如你所见,我对开发REST API相当陌生,所以任何建议和指针都会受到欢迎。

回答

3

RESTful系统利用现有技术已经可用,而不是重新实施它们。由于HTTP已经包含了Basic Authentication形式的认证支持,因此您应该重新使用它。它是客户传送凭证的广泛支持机制。

是的,客户端应该发送他们的凭据与每个请求。 Cookies适用于不喜欢重复输入密码的人类客户,这种情况并非如此。 Cookies意味着服务器上的会话状态,并且可能会使可伸缩性变得非常困难。

本网站可能有100个关于RESTful认证的问题。我鼓励你去搜索和阅读更受欢迎的。

+0

听起来像一个计划。但是,如果我正在制作一个JavaScript Web应用程序来访问RESTful后端:如果将用户的凭证保存在某个方便用于请求的地方是不好的做法?如果页面发生变化,我应该将凭据保存在本地存储中吗?当我在开发桌面/移动应用程序时没有控制权时,有没有更好的方法? – Hassan

+0

你总是可以加密和散列他们的凭证,这样你就不会存储/传递明文密码。使用类似SHA-256的东西,你会保持良好状态。 –