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

Web services 使用RESTful Web服务设计的在线应用程序,web-services,rest,restful-authentication,Web Services,Rest,Restful Authentication,我只是想问一下,我们如何使用RESTful架构/Web服务来实现在线购物类应用程序 假设我们想建立类似亚马逊的任何东西,用户可以登录和购物。第一次,我们将使用HTTP Basic或任何其他安全机制执行身份验证,这很好 现在,当用户发出第二个请求时,他需要发送一些授权码或sessionId或其他信息,以便服务器知道这是先前登录的同一用户。但是,RESTfulWebService是无状态的,所以我们不应该存储旧的会话相关内容。在这种情况下,我们如何对用户进行身份验证 我读了一些关于cliet和服务器

我只是想问一下,我们如何使用RESTful架构/Web服务来实现在线购物类应用程序

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

现在,当用户发出第二个请求时,他需要发送一些授权码或sessionId或其他信息,以便服务器知道这是先前登录的同一用户。但是,RESTfulWebService是无状态的,所以我们不应该存储旧的会话相关内容。在这种情况下,我们如何对用户进行身份验证

我读了一些关于cliet和服务器证书的内容,但它适用于两个不同服务相互通信的应用程序。我说得对吗


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

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

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

休息时这是一件重要的事情。。。REST将会话存储在客户端,而不是服务器端。。。如果您想在服务器端存储重要的内容,那么它必须是资源或资源的属性

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

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

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


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

关于保护web服务的问题应该会有帮助。这篇文章不错,我会读的!