【问题标题】:JWT authntication and its alternatives to reach RESTfulness of web application back-endJWT 身份验证及其替代方案以实现 Web 应用程序后端的 RESTful
【发布时间】:2018-08-12 07:36:59
【问题描述】:

在我的公司,我们正在构建一个 Web 应用程序,而最实际的问题是选择一个身份验证解决方案。我正在考虑 3 种最常用的维护方式 与经过身份验证的用户的会话:无状态 JWT(所有会话数据在其有效负载中都包含 JWT 令牌)、有状态 JWT(令牌仅用于验证请求,并且在其有效负载中它具有会话 ID 到服务器上的会话数据记录)和传统会话 ID 存储在cookie,需要额外检查服务器中的匹配 id。

因为我想构建这个应用程序 RESTful,只有第一种方式对我来说似乎是正确的。这样服务器就不需要保持任何状态。

我的第一个问题是:可以将所有会话数据存储在令牌负载中吗(当然,这些数据不是那么大,它们不应该是秘密,因此不需要安全性)。

另外,我也将实现注销逻辑,而且我知道,将令牌列入黑名单,在我的情况下,我认为,最好的解决方案也会破坏无状态。 您是否知道任何其他方式来实现立即使 JWT 令牌无效的注销逻辑?

感谢您的回答。

编辑: 在失效的情况下,我正在考虑发送一个更新的令牌,带有一个告诉“我失效的令牌”的标志或过期的过期日期。此解决方案仅适用于“好孩子”用户。黑客将保留以前且仍然有效的令牌。

【问题讨论】:

    标签: rest session authentication cookies jwt


    【解决方案1】:

    使用 JWT 注销通过删除令牌客户端来工作。像这样。

    function removeToken() {
      localStorage.removeItem("jwt-token");
    }
    

    没有令牌,用户将被注销。所以我认为它是立竿见影的?

    【讨论】:

    • 好的,这在我控制客户端代码的情况下有效。尽管如此,它距离防弹还很远。如果客户愿意,他可以备份令牌并在从本地存储中删除后使用它。
    • 如果您想控制身份验证服务器端,可以查看 cookie-sessions。这是一个很棒的教程。 (sitepoint.com/passport-authentication-for-nodejs-applications)
    • Cookie-sessions 看起来像我提到的传统解决方案。它使服务器有状态,这还不错,我以前多次使用这种方法,但现在我想尝试构建完全 RESTful 的后端,这种方法有点破坏它。
    猜你喜欢
    • 2012-01-16
    • 2015-08-27
    • 2010-11-11
    • 1970-01-01
    • 2014-04-23
    • 2011-06-13
    • 2015-01-21
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多