一:解释刷新tocken机制?
答:当用户第一次登录时,认证用户后,返回给用户两个tocken,一个专门用于登录的登录tocken,通常设置两个小时。另外一个用于刷新tocken,通常设置14天。当在两个小时内,验证用户的登录tocken就可以登录,两个小时过后,用户的登录tocken失效,用户携带刷新tocken来到后端,后端返回给前端一个响应,前端看到这个响应后,请求刷新tocken,后端此时设置新的tocken给用户。
优点:防止爬虫获取用户的登录tocken后,tocken一直有效,一直爬取后台信息。
二:JWT登录的优点?
- 1:无状态
- 2:避免CSRF攻击
- 3:适合移动端
- 4:单点登录
1:token 自身包含了身份验证所需要的所有信息,使得我们的服务器不需要存储 Session 信息,大大减轻了服务端的压力。
2:CSRF攻击是,点击虚假网站,网站利用浏览器的cookie,向服务器发送请求。但是对于JWT来说,在我们登录成功获得 token 之后,一般会选择存放在 local storage 中。然后我们在前端通过某些方式会给每个发到后端的请求加上这个 token,因为不会涉及到cookie,这样就不会出现 CSRF 漏洞的问题。
3:cookie和session只能保存在浏览器中,不适合移动端,但是JWT可以在移动端使用。
4:对于session来说,由于服务器保存用户信息,服务器可能存在多台,那么服务器需要缓存共享,才能让一个用户访问多台服务器。而JWT不存在这个问题,一台服务器颁发tocken,多台服务器都可以认证。
三:如何防止tocken被劫持?
答:我觉得任何一种认证方式,都不能做到逻辑上的绝对安全和毫无漏洞。但是如果给攻击者造成了足够的麻烦,使其破解成本大大提升,那么我们就认为认证系统足够安全了。所以可以采用JWE。
1:JWE包括5部分,头部,加密密钥,初始化向量,密文,认证标记。
加密步骤:
1:根据头部声明将头部进行编码。
2:随机生成一个对称加密密钥,然后使用非对称加密的公钥对对称加密密钥进行加密。
3:初始化向量。
4:使用对称加密密钥对用户信息进行加密。
5:生成数字认证标签。
解密步骤:
1:使用非对称加密的私钥对加密密钥解密,得到对称加密的公钥。
2:使用对称加密的公钥解密,得到用户的信息。
四:JWT的缺点有什么?
JWT唯一的缺点就是无法销毁已经颁发的tocken,当用户退出登录时,服务器给前端返回信息,让浏览器清除掉Local Storage中的tocken,但是如果通过其他方式,在清除之前将tocken保存下来,在这个Tocken的有效期内,使用这个tocken仍然可以访问服务器。直到tocken过期。