使用RESTful Web服务设计的在线应用程序

时间:2014-03-05 06:49:28

标签: web-services rest restful-authentication

我只是想知道,我们如何使用RESTful架构/ webservice来实现在线购物类应用?

假设我们想要建立像亚马逊这样的用户可以登录和购物的东西。第一次,我们将使用HTTP Basic或任何其他安全机制执行身份验证,这很好。

现在,当用户发出第二个请求时,他需要发送一些授权代码或sessionId或其他内容,以便服务器知道这是之前登录的用户。但是,RESTful webservice是无状态的,因此我们不会假设存储与会话相关的旧内容。在那种情况下我们如何验证用户?

我读过有关cliet和服务器证书的内容,但它适用于两个不同服务相互通信的应用程序。我是对的吗?

我是webservice的新手:-)所以我想到了这种愚蠢的问题。

1 个答案:

答案 0 :(得分:1)

http basic auth在客户端存储用户名和密码,并在每次请求时再次发送。因此,通过REST,您必须发送这些识别因素并通过每个请求进行身份验证...

如果您希望它更快,您可以缓存身份验证机制......

这是一个重要的事情,REST ... REST将会话存储在客户端,而不是存储在服务器端......如果你想在服务器端存储重要的东西,那么它必须是资源或属性资源...

如果您允许某人编写第三方应用程序(您的REST服务的另一个客户端),则用户应接受此第三方应用程序可以以他/她的名义发送请求。 OFC。用户不想共享他/她的密码,因此授予第三方应用程序权限是一件难事。例如oauth解决了这个问题......

第三方应用程序(客户端)的基本概念,即您询问用户是否允许他们发送某些请求。例如,它通过Facebook询问,如果你想分享你的身份,熟人名单等等......你允许代表你发送帖子等等......点击确定后,REST应用程序应存储该信息并给出客户端对您帐户的权限。如何查看谁发送请求? OFC。不允许使用CSRF,因此第三方客户端无法代表您向您使用的客户端发送跨域请求。所以它必须通过一个不同的连接发送它的请求,可能是curl。它应该发送什么? OFC。请求详细信息。还有什么?它的身份(api密钥)和你的身份。这是最基本的方法。

还有其他解决方案。您可以通过将密码存储在数据库中来使用与您使用的方法类似的方法。您只使用慢速算法存储密码的哈希值。通过身份验证,您可以在给定密码上再次创建哈希。当存储的哈希与新创建的哈希相等时,应用程序接受该身份并授予对该帐户的访问权限。您可以按请求使用相同的方法。第三方客户端需要请求的哈希值。之后,它使用获得的哈希发送请求,并通过获取请求,服务器根据请求的内容将该哈希与它创建的哈希进行比较。如果它们相等,则请求有效。这很酷,因为它可以防止对第三方客户端的CSRF攻击......

我想还有很多其他的,更复杂的方法,我不知道,我不是安全专家,可能你也不会。您只需了解基础知识并使用工具,例如oauth,如果您想允许第三方访问您的API。如果您不想这样,那么您可能不需要REST应用程序,只需要一个简单的Web应用程序......这取决于您的需求,访客数量等...