第二步:为了防止用户篡改数据,通过对Token Header+Token Payload + Token Signature进行加密签名并生成一串加密过由三个部分组成的字符串,一个完整的token是下面这样的。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjU3OTM2NTc5LCJqdGkiOiI2ZDU1MTU3NjZkN2U0ODA5ODY4NzAxNWJjYmYyY2M3OSIsInVzZXJfaWQiOiIxMiJ9.A6LVGbmFGDDO1zVNNfl9gjwg6DABxX1rXjiPdoqLafg
第三步:生成完成token后通过登录接口返回json数据如下,token字段即是用户验证成功后后端生成的用户(凭证):
{ "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjU3OTM2NTc5LCJqdGkiOiI2ZDU1MTU3NjZkN2U0ODA5ODY4NzAxNWJjYmYyY2M3OSIsInVzZXJfaWQiOiIxMiJ9.A6LVGbmFGDDO1zVNNfl9gjwg6DABxX1rXjiPdoqLafg", "id": "12", "userInfo": { "username": "admin", "nickname": "25252", "phone": "", "email": "123456@163.com", "isSuperuser": true, "isStaff": true } }
第四步:前端为了后续在请求接口时都携带token进行身份验证都会将其token保存到浏览器的Local Storage中以便后续能直接使用
第五步:如果用户还需请求其他接口时每次请求接口都会自动携带(前端需要做相应的处理才能自动携带)Token给到后端进行验证,验证通过后则向客户端返回对应的接口数据
PS:如果需要断开会话操作需要二步操作即可结果会话(浏览器直接清空Local Storage中的token)清空后请求接口时不会携带token值,token会找不到。或者等待token失效则无法再次通过原本的token进行验证了。
JWT 解决什么问题(优点,特点)
解决了对服务器的资源开销问题,如session每次请求都需要访问服务端数据库大大提升了服务器资源消耗,而token的存在则可对该问题进行解决,JWT的精髓在于:“去中心化”,数据是保存在客户端的,不用访问数据库
解决了对跨域请求的限制目前大部分都采用了前后端分离架构,前端界面不由服务器端进行渲染因此可能产生跨域及跨平台(移动设备等)请求服务器等问题
信息泄露及信息篡改,cookie及session都容易被任何不法分子进行劫持并篡改,JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证,不过也不能说有了token就能绝对安全仅仅是目前针对信息篡改增加了难度而已。
本文地址:百科问答频道 https://www.neebe.cn/wenda/903342_3.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!