新人学习token鉴权有个疑惑,token本身有加密的用户信息,并保存在客户端.如果token只存在客户端,感觉并不够安全,且无法主动退出登录(无法主动过期).
听说一般token都存在redis里,那本质上就是在服务端也保存了token,可以通过token-userId的形式存储.如果是这样的话,token本身的意义是什么,token根据就不需要携带用户信息
似乎可以在客户端创建一个随机clientId,然后携带在header上,调用登录接口后, 后端以clientId-userId的形式将clientId存在redis里.这种方式似乎更简洁, 携带的数据量更少也更安全
梳理下你的问题:
token需要存储在服务器端。客户端存token是因为服务器端要鉴权,所以获取到token后要存下来。如果服务器端校验这个token已经失效,客户端需要跳转到登录页面。客户端可以通过退出登录失效token。
完整流程:用户登录 - 登录成功 - 服务器颁发token - 用户带着token使用系统 - token失效/用户退出登录 - 整个流程再来一遍
token用来判断用户的登录态,token必须跟用户绑定。
这个token必须是服务器端颁发的,并且只能是在用户名密码校验成功以后颁发。客户端给自己颁发岂不是监守自盗了。