【问题标题】:How to pass secure data like user-name/password in Json Web Token?如何在 Json Web Token 中传递用户名/密码等安全数据?
【发布时间】:2016-08-05 23:07:54
【问题描述】:

有很多讨论和赞成 MEAN 应用程序的基于令牌的身份验证架构是安全的。但我有一个问题,它是否真的将用户名和密码作为 JSON Web 令牌中的有效负载传递给授权和身份验证,如果我们没有在有效负载中传递安全信息,那么 JSON Web 令牌如何在服务器中验证没有用户名/密码的用户一边。

我阅读了很多架构资料,但他们无法解释他们在不使用用户名/密码的情况下使用什么逻辑来验证令牌。

将身份验证令牌存储在 cookie 中而不是网络存储中是否有效?

是的,我知道他们使用私钥和公钥进行验证,但这还不足以进行身份​​验证。要对特定用户进行身份验证,它需要一些关键值,例如用户名/密码或识别特定用户所需的任何关键访问权限。

【问题讨论】:

    标签: angularjs mean-stack jwt express-jwt


    【解决方案1】:

    不,在 JWT 中发送密码是不安全的。这是因为 JWT 声明经过简单编码,任何看到它们的人都可以轻松解码。在返回给用户的 JWT 中存储任何敏感信息是不安全的。

    您似乎误解了 JWT 在身份验证中的滚动。通常,JWT 身份验证将取代有状态会话系统。在许多正常流程中,用户使用他们的用户名和密码进行身份验证,服务器为用户设置会话 cookie。当用户返回网站时,他们的浏览器会连同他们一起发送会话 cookie。服务器看到一个带有会话 cookie 的请求,并从某个数据库中查找相关的会话数据。

    在许多基于 JWT 的系统中,用户像往常一样使用其用户名和密码进行身份验证,但授权服务器不会设置引用数据库中某些内容的会话 cookie,而是会设置一个包含用户 JWT 的 cookie会话数据。这可能包括他们的用户名、他们拥有的任何角色或任何其他必要的数据。

    现在,当用户返回网站并且他们的浏览器显示这个新的 JWT cookie 时,服务器只需要验证它是否由授权服务器签名即可信任其中的声明。避免在数据库中查找会话信息有很多好处,其中最重要的是速度。

    【讨论】:

    • 谢谢...非常感谢您提供知识。所以这意味着 JWT 在服务器端管理某些类型的会话数据库。它在服务器端使用 JWT 令牌的引用来验证令牌过期和验证。那么在 MEAN 应用程序中,如果我使用 express-jwt 模块,我是否会创建新的会话 MongoDB 集合来存储和管理 JWT 令牌?
    • 这当然是可能的,但是很多人将会话数据直接存储在 JWT 中并完全替换服务器端会话。如果你只是打算使用 JWT 在数据库中查找会话,为什么要使用 JWT?
    • 对于 JWT 的流程,我真的有点困惑,它有什么帮助以及它是如何工作的。我参考了很多图表和博客,但我仍然无法得到答案,即 JWT 有多大帮助以及它如何正常工作?我非常了解 JWT 的一般过程,但是当 JWT 具有秘密和有效负载时如何刷新令牌? JWT 真的需要太多时间来专门为我理解内部流程。最大的问题是它如何验证令牌,我读了很多博客,但对我来说仍然是抽象的。
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多