1

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

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

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

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

4

1 回答 1

6

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

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

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

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

于 2016-04-14T13:04:05.773 回答