基于token的登录认证

"token login authority"

Posted by xiaobai on July 22, 2018

最近新做移动端项目,h5的页面嵌入app中,信息userinfo的获取,页面与app的协议传递,联调的很心累啊。Token知识点一直是自己想要深入了解,这周就想了解下这个知识点,顺便对自己这周的工作做个总结。性能上报,还需要抽时间来学习。废话不多说,go ~

目的:客户端和服务器端进行通信,进行用户认证。

优势

  • 支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输.
  • 无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息.
  • 更适用CDN: 可以通过内容分发网络请求服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可.
  • 去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在API被调用的时候,你可以进行Token生成调用即可.
  • 更适用于移动应用: 当你的客户端是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理),这时采用Token认证机制就会简单得多。
  • CSRF:因为不再依赖于Cookie,所以你就不需要考虑对CSRF(跨站请求伪造)的防范。
  • 性能: 一次网络往返时间(通过数据库查询session信息)总比做一次HMACSHA256计算 的Token验证和解析要费时得多.
  • 不需要为登录页面做特殊处理: 如果你使用Protractor 做功能测试的时候,不再需要为登录页面做特殊处理.

实现方法:

  • 第一次请求时,用户发送账号与密码
  • 后台校验通过,则会生成一个有时效性的token,再将此token发送给用户
  • 用户获得token后,将此token存储在本地,一般存储在localstorage或cookie
  • 之后的每次请求都会将此token添加在请求头里,所有需要校验身份的接口都会被校验token,若token解析后的数据包含用户身份信息,则身份验证通过。