当前位置: 首页 > 科技观察

WebSecurity-同事告诉我JWT是明文的...

时间:2023-03-12 08:33:34 科技观察

一天“小张”收到一个请求“用户登录认证成功后,后续请求可以携带token,无需重新认证”。这时,“小张”请教了资深搬砖师“小李”。有多年搬砖经验的同事“小李”说:HTTP协议是无状态的。第一次登录认证成功后,下次请求时,服务器并不知道请求者的身份信息。通常有两种实现方式:一种是传统的方式是将用户session信息保存在服务器上,每次请求时携带sessionID进行校验。这种方式的缺点是会占用服务器内存。当用户越来越多时,服务器容量会增加内存开销,以及由于存储在内存中而导致的可伸缩性问题。第二种方法是使用JWT技术,这是一种无状态的认证。只做校验,将用户状态分发给客户端,服务器端不存储信息。“小张”听完,连忙说第二首好听。搜索了一些相关的文章和介绍后,就开始愉快的写代码了。完成后,我将代码提交给同事“小李”进行代码审查。作为一名资深搬砖工程师,“小李”一眼就看出了问题所在:“如何将用户密码放入JWT生成的token中!JWT默认为明文,无法存储隐私信息”。“小张”不解,反问:怎么会是明文呢?看了加密数据,是一堆乱码。以下是打印的令牌信息。//jwt签名后生成的token"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IuW8oOS4iSIsInBhc3N3b3JkIjoxMjM0NTYsImlhdCI6MTY2MTg2OTQxMX0.3-60HUf_cKIo44hWUviNzqdUoUGngGQfrqffg0A6uqM"“小李”通过一段Node.js代码展示了如何解密出JWT签名后的token数据。Atthistime,"XiaoZhang"fellintodeep想着,他的脑海里突然冒出两个问题