由于现在是两个不同的站点了。所以我们不能使用session cookie等这些技术来完成认证。因为我们的前端有可能是app app是不支持cookie等这些东西的。所以我们在前后端分离后需要使用一种新的认证方式Token,Token的这种模式也是目前比较流行的认证技术。微信就是使用Token的这种技术。我们的很多APP也是使用这种技术。
Token是什么
用户的数据安全性很重要,而http又是一种没有状态的协议,并不能区分访问者。这就需要做用户验证,用户输入账号和密码之后,需要把用户的登录信息记录下来,防止访问下一个页面的时候需要重新验证。传统的处理方法是,借助与Session机制,当用户登录之后,服务端生成一个记录,这个记录用来标记用户,然后发送给客户端,客户端将这个标记存储在Cookie里面,当客户端发起下一次请求的时候,会附带上Cookie里的这个标记,然后服务端会验证这条标记在服务器有没有记录,如果有,则通过验证,没有的话就返回失败。这种处理方式是基于服务器的,Session存储在服务器内存里或者是写到数据库里,需要在服务器定期的清理过期的Session,同时当用户量大了之后,对内存的需求会增加,对服务器的压力也会增加。Token也是用于验证用户身份的一种工具,是一个客户端令牌。当客户端发起登录请求时,会在服务端生成一串字符串,反馈给客户端作为Token令牌,之后的用户访问只需要带上这个Token即可。基于Token的验证方法,服务端不需要存储用户的登录记录。这两种验证方法的具体流程如下图:

Token的使用流程可以概括为:
- 用户登录,填写用户名和密码,并发送给服务端
- 后端验证用户登录信息
- 验证通过,签名生成一个Token,返回给客户端
- 客户端存储这个Token,在下一次访问服务端的时候,会附带上这个Token
- 服务端下一次接收到数据时,验证Token,并返回数据
Token的优点
Token作为用户认证的处理方式,有几个优点:
- 无状态,可扩展:不会在服务端存储用户的登录状态,可以很容易的实现服务器的增减
- 支持移动设备,对多类型客户端的支持良好
- 支持跨程序调用,各个接口之间的调用更方便
- 安全可靠
Previous: 跨域访问的问题和前端AJAX请求
Next: WEBAPI加入身份认证