【问题标题】:How to handle JWT token on client side of Spring MVC?如何在 Spring MVC 的客户端处理 JWT 令牌?
【发布时间】:2019-10-02 16:11:02
【问题描述】:

有 Spring MVC 应用程序 - 服务器生成 HTML,客户端不是 SPA(即这与任何形式的 API 无关)。
在身份验证期间生成 JWT 令牌并将其返回给客户端。在授权期间,服务器会验证 JWT 令牌。

如何在客户端存储 JWT 令牌并通过所有进一步的请求将其传递给服务器?请记住这是 Spring MVC 应用程序而不是 SPA。

我试图在谷歌上搜索任何示例,但唯一的发现与 REST 身份验证有关,与此案例完全无关。

在最坏的情况下,我们可以从 JavaScript 执行身份验证并将 JWT 令牌存储在缓存/cookie 中。但也许 Spring MVC 支持这个开箱即用,我们只需要在配置中设置一些复选框:-)

【问题讨论】:

    标签: javascript java spring-mvc authentication jwt


    【解决方案1】:

    对于非 SPA,通常的方法是将身份验证令牌存储在服务器会话中。当客户端发出请求时,将通过 JSESSIONID cookie 检索适当的会话(如果禁用 cookie,则将 JSESSIONID 添加到 URL)。

    我不知道你为什么不能使用上面的方法,但是如果你想在客户端存储 JWT,一个常见的方法是:

    • 在生成令牌时将令牌存储在浏览器的本地或会话存储中,例如window.sessionStorage.authToken = 'token_value';
    • 通过将Authorization HTTP 标头设置为令牌的值,将令牌添加到每个后续请求中
    • 当用户注销时,从浏览器存储中删除令牌

    【讨论】:

    • 您提到的 3 个步骤是否假设在 JavaScript 端进行处理?我很感兴趣 Spring MVC 是否为此提供了一些东西。 JavaScript方式很清楚。
    • 关于基于 cookie 的身份验证的第一点,我不希望有与会话关联的状态,即客户端可以连接到任何服务器实例。
    • @nickolay.laptev 是的,您必须使用 JavaScript 存储/检索/删除令牌
    【解决方案2】:

    我可以在服务器端使用带有 JWT 令牌的“Set-Cookie”标头。客户端会将此标头解释为自动设置 cookie。在这种情况下,将令牌传递给每个请求,无需客户端执行其他步骤。
    这里描述了一些细节https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage

    在提供更好的选择之前,我会将此作为可接受的答案。

    【讨论】:

      猜你喜欢
      • 2016-05-29
      • 1970-01-01
      • 2020-01-31
      • 2021-05-19
      • 2018-03-04
      • 2016-03-22
      • 2019-03-04
      • 2019-11-15
      • 2022-08-05
      相关资源
      最近更新 更多