面试常见问题
你们使用JWT做登录凭证,如何解决token注销问题
答:jwt的缺陷是token生成后无法修改,因此无法让token失效。只能采用其它方案来弥补,基本思路如下:
1)适当减短token有效期,让token尽快失效
2)删除客户端cookie
3)服务端对失效token进行标记,形成黑名单,虽然有违无状态特性,但是因为token有效期短,因此标记 时间也比较短。服务器压力会比较小
- 既然token有效期短,怎么解决token失效后的续签问题?
答:在验证用户登录状态的代码中,添加一段逻辑:判断cookie即将到期时,重新生成一个token。比如token有效期为30分钟,当用户请求我们时,我们可以判断如果用户的token有效期还剩下10分钟,那么就重新生成token。因此用户只要在操作我们的网站,就会续签token - 如何解决异地登录问题?
答:在我们的应用中是允许用户异地登录的。如果要禁止用户异地登录,只能采用有状态方式,在服务端记录登录用户的信息,并且判断用户已经登录,并且在其它设备再次登录时,禁止登录请求,并要求发送短信验证。 - 如何解决cookie被盗用问题?
答:cookie被盗用的可能性主要包括下面几种:- XSS攻击:这个可以在前端页面渲染时对 数据做安全处理即可,而且我们的cookie使用了Httponly为true,可以防止JS脚本的攻击。
- CSRF攻击:
- 我们严格遵循了Rest风格,CSRF只能发起Get请求,不会对服务端造成损失,可以有效防止CSRF攻击
- 利用Referer头,防盗链
- 抓包,获取用户cookie:我们采用了HTTPS协议通信,无法获取请求的任何数据
- 请求重放攻击:对于普通用户的请求没有对请求重放做防御,而是对部分业务做好了幂等处理。运行管理系统中会对token添加随机码,认证token一次有效,来预防请求重放攻击。
- 用户电脑中毒:这个无法防范。
- 如何解决cookie被篡改问题?
- 答:cookie可以篡改,但是签名无法篡改,否则服务端认证根本不会通过
- 如何完成权限校验的?
- 首先我们有权限管理的服务,管理用户的各种权限,及可访问路径等
- 在网关zuul中利用Pre过滤器,拦截一切请求,在过滤器中,解析jwt,获取用户身份,查询用户权限,判断用户身份可以访问当前路径
- 服务端微服务地址不小心暴露了,用户就可以绕过网关,直接访问微服务,怎么办?
- 答:我们的微服务都做了严格的服务间鉴权处理,任何对微服务的访问都会被验证是否有授权,如果没有则会被拦截。**