这是我参加「第五届青训营 」伴学笔记创作活动的第 8 天
本文记录一下在大项目中遇到的问题,并作出现阶段的解答。暂作保留,后续回头再看,可能会发现进步多多。
记录问题如下:
- 如何使用jwt对用户完成鉴权
如何使用jwt对用户完成鉴权
jwt 全称为JSON Web Token。是目前最流行的跨域认证解决方案
在以前的用户鉴权功能中,使用以下步骤进行验证:
1、用户向服务器发送用户名和密码。
2、服务器认证通过后,在当前会话(session)中保存相关数据。
3、服务器返回一个session_id给用户,写入用户的Cookie中。
4、用户后续的每一次请求都会将session_id通过cookie传回服务器。
5、服务端收到session_id,找到之前保存的数据,从而知道用户的身份。
但是该方法有一个缺点,就是如果用户体量太大,那么服务器需要承载的用户状态信息就会非常大。这会造成很严重的性能问题。
于是jwt应运而生。
jwt最大的特点是不需要在服务器上暂存任何用户信息,而是将用户信息存放在客户端。
用户访问服务器,服务器验证身份之后,通过自己的私钥对用户信息进行签名,并将签名之后的信息返还给客户端。这些信息中包含着用户信息、有效时间等内容,下次用户只需要发送jwt信息给服务器,服务器自行验证签名的合法性,如果合法,那么认为这些信息也合法。
这样就达到了鉴权的目的。
在代码实现中,go实现了jwt的包。hertz和kitex也有可以使用的中间件,方法不一。
我们在服务器中规定了一个私钥,通过私钥对信息进行加密,称为createJWT。
当用户返还JWT时,我们调用parseJWT对JWT进行鉴权。