鉴权界的后起之秀:Token鉴权方案

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

Token鉴权在产生之初就是为了打败Session/Cookie的,它是在前辈的基础上进行了变形改造,在数据传输中不仅提升了数据安全性,更是保证了服务端的高性能,带来了noSession的革命。

  1. Token是什么

Token,通常叫做令牌,是一种自定义实现的类似Session/Cookie机制的,用来代替传统Session/Cookie的新兴鉴权方案,当前很多的应用API鉴权就是使用的Token令牌。

Token是服务端生成的一串加密字符串,用户在用户登录成功后生成并返回给客户端,之后客户端的每次请求都会通过GET/POST/Header等方式携带Token,服务端通过验证Token的有效性来完成鉴权。

  1. Token带来了什么

基于Token的鉴权方式是无状态的,服务端将不再需要存储Session信息,这种noSession的方式让服务器扩展更加方便,并节省了大量的服务端内存空间。
Token鉴权方式优点:

  • 无状态、可扩展、适合分布式
  • 性能高、安全性好,能够防止CSRF(跨站请求伪造),解决跨域问题
  • Token鉴权时只需要客户端保存信息,减少了服务端对内存的消耗
  • 对于手机APP端适应性好
  1. Token鉴权流程

相比于Session/Cookie鉴权,Token验证变动最大的就是需要自定义完成Token的生成和Token解析认证,不再是针对SessionId的验证和获取信息。

基于Token的鉴权方式的完整流程为:

  1. 客户端用户通过用户和密码进行首次登录
  2. 服务端接收用户请求,并验证用户名和密码的正确性,登录验证成功后根据自定义规则生成Token信息
  3. 服务端将生成的Token通过响应返回给客户端
  4. 客户端将Token信息存储在本地
  5. 客户端在之后的每次请求中携带Token信息
  6. 服务端针获取请求中的Token,并根据定义的验证机制判断Token合法性,验证成功获取用户信息,保持用户状态
  7. Token存活时间达到设置的有效期后自动失效,此后用户请求时Token验证不通过,需要用户重新登录验证
  1. Token的技术实现

当然,Token的实现上似乎还存有一些疑问:

  • 类似Session/Cookie机制,但是所有都需要自己去实现,相当于从零开始,这也太复杂了
  • Token信息若是存在Cookie中,这样的方式和Session/Cookie没有区别,Token方案中怎么解决
  • 生成Token时如何保证数据的安全性

为了更好的解决这些问题,产生了一些基于Token方案的的技术实现,如:

  • JWT
  • OAuth
  1. 总结

Token势要打破Session/Cookie的鉴权机制,并形成一种自己的鉴权方案,为API接口鉴权提供更加安全、方便、高效、功能丰富的体验,后续我们就要慢慢揭开JWT这一基于Token的当下主流鉴权方案。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%