1、jwt和security的区别
- jwt ( json web token)优点:
无状态,json格式简单,不需要在服务端存储
- 缺点
一旦创建无法销毁或者修改状态,没有办法做权限 控制
- security优点:
和spring无缝结合,可以对用户状态坐控制,可以做权限控制
- 缺点
用起来比较复杂,权限控制需要一连串过滤连,消耗服务器内存空间
2、如何销毁jwt
生成token时,有效期设置短一些
可以和redis结合使用,退出时销毁redis的token。判断redis的token即可
还可以添加黑名单功能,对其进行拦截
3、如果token有效期过短,如何保持会话
token要到期时,在重新生成一份token
4、如何防止cookie被篡改
可以设置cokkie的状态为httponly
可以在请求中添加防盗链
可以把token存放在请求头中或者local storage中,由于无状态的token过长,很容易达到4kb
由于容易被篡改,payload中不要放用户重要信息,如密码
5、如果用户禁用cookie怎么办
普通用户一般不知道cookie,也不会禁用,如何禁用我们对其友好提示,让其开启
6、如何防止token异地登陆
token是没办法做异地的判断的,这时我们可以采取传统的session方式
7、你们怎么做权限控制的
我们有一套权限控制服务,保存用户的角色和路径信息、当用户发起请求的时候,通过网关的的全局pre过滤器拦截所有请求,获取请求信息,解析jwt参数,根据参数获取用户,根据用户明去查询数据库的用户是否存在,以及当前用户有无访问此地址的权限,没有即拦截
8、你们微服务地址对外暴漏了怎么办
首先因为用户访问的时候走的是我们nginx的代理,微服务对外暴漏的可能性很低,即使暴漏了,我们每个微服务也有一套的鉴权校验策略;首先有一张表存每个微服务的id,密钥;服务器启动的时候使用id和密钥去授权中心生成jwt令牌,去访问其他的时候访问携带令牌
9、如何防止token被篡改
jwt使用了header和payload参数来校验是否被篡改,header存放算法类型和类型是jwt方式的参数,payload是存放用户自定义的参数,还有签名结合来确认token是否被篡改
参考:https://blog.csdn.net/MINGJU2020/article/details/103039418