【问题标题】:Is is possible in Go to access JWT token stored in client localstorage?是否可以在 Go 中访问存储在客户端本地存储中的 JWT 令牌?
【发布时间】:2014-12-16 22:50:37
【问题描述】:

我已经在后端实现了一个 SPA 应用程序,并且使用 Angular 可以很容易地授权存储在浏览器本地存储中的令牌,但在前端我使用服务器来呈现 html。

在 HTTP 请求处理程序上,如何从服务器获取浏览器的 localstorage / sessiontorage 以检索令牌、验证它并在响应中呈现允许的内容?

这是可能的还是我必须使用会话?

我在想也许 http.client 有某种我看不到的方式,这可以帮助完成工作?

编辑 如果不可能,我发现了这个:http://www.gorillatoolkit.org/pkg/securecookie - 我试着用谷歌搜索了一下,但我想绝对确定这个 hmac 验证使这个解决方案至少与 JSON Web 令牌一样安全?

如果确实有人可以提出很好的论据,为什么应该在会话中使用服务器资源,请与我分享(顺便说一句,我不关心旧浏览器 - 只关心性能和在可能的情况下使用客户端,只要安全不受影响)

【问题讨论】:

  • 你应该重新组织你的问题:如果两个主题看起来太分开,你应该将你的问题分成多个较小的问题,你应该为你的问题使用项目符号(或编号)。这样,这些具体问题就可以一一解答。这可能会导致更少的反对票/更多的赞成票。

标签: go client local-storage server


【解决方案1】:

有些人对你的问题投了反对票,所以也许把事情弄清楚会有所帮助:

  • 后端是生成 html 并将其发送到用户服务器端的东西;
  • 前端是最终用户在其浏览器(包括 javascript)中看到的内容 - 客户端。
  • 浏览器本地存储位于frontend,因此backend 无法访问。您可以使用 cookie(它们存储在客户端,但发送到服务器端,反之亦然)——但仅此而已。
  • securecookie 是一种在客户端存储 cookie 的方式,除了您自己之外,任何人都无法更改/查看它们 - 因为它是使用只有您(应该)知道的“秘密”加密的。
  • 会话数据的优势在于,无需验证它是否伪造 - 您就是将数据放在那里的人,如果有东西/某人确实伪造了会话数据,那么您就得到了更大的问题。您还可以存储您不希望最终用户/客户知道的内容。使用加密 cookie 是实现此目的的替代方法。
    • 请注意,您也可以使用会话数据来存储大型数据 - 如果有(可能有效但)奇怪的原因需要为最终用户存储 500MB 会话数据 blob,则您不想将 500MB 发送到最终用户。会话数据保留在您的服务器上。

【讨论】:

  • 感谢您的出色回答。不过我想知道 - 我应该让服务器免于记住 X 数量的登录用户(会话)的状态,还是应该发出一个令牌,将它放在一个在每个请求上发送的安全令牌中 - 然后使用在数据库中查找用户令牌(在用户登录时与用户一起存储在数据库中)......伪造检查与将会话保持在内存中 - 您认为哪个使用更少的资源并且可以处理大多数并发用户?只是对您的意见感兴趣,因为您似乎知道很多:)
  • @SK84 实际上取决于服务器端。在单服务器应用程序中,并没有太大的区别。虽然查找通常更快(特别是如果您使用数据库),现在 + 内存/存储真的很便宜。但是,当使用多个服务器时,您希望在这些服务器之间共享会话数据:您必须设置一个专用的数据库服务器来处理会话数据)——这并不容易。 Cookie-data 没有这个问题:服务器无论如何都会收到所需的信息。但是,当这成为一个问题时,您将有足够的资源来担心它。
猜你喜欢
  • 2020-12-21
  • 1970-01-01
  • 2018-11-15
  • 2012-10-08
  • 1970-01-01
  • 2021-05-03
  • 2020-10-25
  • 2022-01-15
  • 2021-09-26
相关资源
最近更新 更多