由于HTTP协定是不存储状态,这意味着我们通过账号密码验证一个使用者时,下一个request请求时他就把刚刚的资料忘了。于是我们的程序就不知道谁是谁,就要再验证一次,为了保证账号安全,我们需要验证用户是否处于登录状态。
前后端分离通过Restful API进行数据交互时,如何验证登录信息与权限。在原来的项目中,使用的是最传统也是最简单的方式,前端登录,后端根据用户信息生成一个Token,并保存这个token和对应用户ID到数据库或session中,接着把token传给用户,存入浏览器的cookie之后浏览器请求时候带上cookie后端根据这个cookie查询用户验证是否过期。
这么做容易出现XSS漏洞,cookie可以被js读取,XSS漏洞会导致用户的token泄露,作为后端识别用户的标识,cookie的泄露意味着信息不再安全,虽然我们通过转义输出内容使用CDN尽量避免XSS注入,但是谁也不能保证在大型项目中不出现这个问题。
在设置cookie的时候,还可以设置httpOnly以及secure项,设置httpOnly后cookie将不能被js读取,浏览器会自动把他家道header当中,设置secure的话,cookie就允许通过HTTPS传输,secure选项就可以过滤掉一些使用HTTP协议的XSS注入,但依然不能完全阻止。
这是一个开放式标准,它定义了一种用于简洁,自包含的用于通信双方之间以JSON对象的形式安全传递信息的方法。JWT可以使用HMAC算法或RSA公钥秘钥进行签名,它具备了:
简洁,可以通过URL,POST参数或者在HTTPheader发送,因为数据量小,速度快,负载中包含了所有用户所需要的信息,也避免了多次查询数据库。