有很多讨论和支持,基于令牌的MEAN应用程序认证架构是安全的。但我有一个疑问是,它确实将授权和身份验证的用户名和密码作为JSON Web Token中的有效负载传递,如果我们没有在有效负载中传递安全信息,那么JSON Web Token如何在服务器中验证没有用户名/密码的用户侧。
我阅读了许多架构内容但他们无法解释他们使用什么逻辑来验证令牌而不使用用户名/密码。
将身份验证令牌存储在Cookie而不是网络存储中是否有效?
是的我知道他们使用私钥和公钥进行验证,但验证不够。要对特定用户进行身份验证,它需要一些关键值,如用户名/密码或识别特定用户所需的任何密钥访问。
答案 0 :(得分:4)
不,在JWT中发送密码是不安全的。这是因为JWT声明只是简单编码,并且可以被看到它们的任何人轻松解码。将任何敏感信息存储在返回给用户的JWT中是不安全的。
您似乎误解了JWT的身份验证。通常,JWT身份验证将取代有状态会话系统。在许多正常流程中,用户使用其用户名和密码进行身份验证,服务器为用户设置会话cookie。当用户返回网站时,他们的浏览器会随之发送会话cookie。服务器看到一个带有会话cookie的请求,并从某个数据库中查找相关的会话数据。
在许多基于JWT的系统中,用户像往常一样使用其用户名和密码进行身份验证,但是代替授权服务器设置引用数据库中某些内容的会话cookie,它将设置包含用户的JWT的cookie。会话数据。这可能包括他们的用户名,他们拥有的任何角色,或任何其他必要的数据。
现在,当用户返回网站并且他们的浏览器显示这个新的JWT cookie时,服务器只需要验证它是否由授权服务器签名,以便信任其中的声明。避免数据库查找会话信息有很多好处,其中最重要的是速度。