【问题标题】:JavaScript REST Client and session managementJavaScript REST 客户端和会话管理
【发布时间】:2013-05-05 10:43:00
【问题描述】:

我一直在寻找这个问题的答案,但似乎没有人这样做。假设您正在设计一个 javascript REST 客户端,并且您想要创建一个登录页面。当然,登录后您将获得身份验证。

因此,以下对 REST API 的请求将取决于您当前的用户 ID,该用户 ID 应按照 RESTful 方式存储在客户端。

我的问题是如何使用 Javascript 存储这个“会话”信息。我研究过 cookie,但在我看来,纯文本太多让人无法信任。同样使用 cookie 可以在其中存储一个映射到服务器上用户信息的会话 id,但这违反了 REST 的无状态概念。

解决这个问题的最佳方法是什么?

【问题讨论】:

标签: javascript rest session


【解决方案1】:

我们也在构建类似的架构,其中 RESTful API 将由 javascript 客户端访问。

我们将使用客户端凭据对客户端进行身份验证,并生成一个身份验证令牌并将其发送给客户端。客户端将其存储在 cookie 或本地数据存储中。此客户端对 API 的进一步请求将使用 HTTP 授权标头发送,并将该令牌包含在标头中。我们将在 API 端对给定令牌的请求进行授权,一旦通过身份验证,请求就会被提供。

直到 n 除非您不访问服务器端的 cookie 信息,否则我认为这不会违反 REST 的无状态原则,因为我们不会在服务器上维护客户端的任何状态(我们不会将其绑定到任何服务器)。关于使用令牌的身份验证过程,我不认为我们在这里绑定服务器和客户端,因为我们有多个服务器并使用负载均衡器,并且这个请求仍然可以由任何服务器提供服务(类似于 Google api)。

注意:我们使用 HTTPS 协议执行此操作,因此我们确信所有这些通信都是安全的。

【讨论】:

  • 我明白了,这是有道理的,感谢您的明确回答。但我还有另一个问题:假设 Paul 登录了一个系统。服务器向他发送一个身份验证令牌。让我们假设 Paul 想要查看他的个人资料,从而导致 API 调用,例如 /profile/{paulId}。我们如何将这个 id 存储在客户端?还是我们使用令牌并将其转换为 Id?
  • 在初始身份验证之后,下一个可访问的 URI 应该可供客户端使用,并且服务器应该发送该 URI。客户端永远不能自己生成任何 URI 来访问服务器资源。如果是这种情况,那么您违反了休息原则(HATEOAS)并且您的服务器无法修改资源状态。阅读有关 HATEOAS 的信息。在上述情况下,您的服务器应提供所有 URI 以继续进行,包括此用户配置文件的 URI,这取决于您在身份验证后的应用程序状态。
  • 你是对的。我来自 RESTful Java 框架不支持 HATEOAS 的“时间”,所以我完全忽略它。
猜你喜欢
  • 1970-01-01
  • 2015-06-01
  • 2016-08-21
  • 1970-01-01
  • 2022-01-08
  • 2015-08-06
  • 2011-01-20
  • 1970-01-01
  • 2013-07-07
相关资源
最近更新 更多