小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
Token鉴权在产生之初就是为了打败Session/Cookie的,它是在前辈的基础上进行了变形改造,在数据传输中不仅提升了数据安全性,更是保证了服务端的高性能,带来了noSession的革命。
- Token是什么
Token,通常叫做令牌,是一种自定义实现的类似Session/Cookie机制的,用来代替传统Session/Cookie的新兴鉴权方案,当前很多的应用API鉴权就是使用的Token令牌。
Token是服务端生成的一串加密字符串,用户在用户登录成功后生成并返回给客户端,之后客户端的每次请求都会通过GET/POST/Header等方式携带Token,服务端通过验证Token的有效性来完成鉴权。
- Token带来了什么
基于Token的鉴权方式是无状态的,服务端将不再需要存储Session信息,这种noSession的方式让服务器扩展更加方便,并节省了大量的服务端内存空间。
Token鉴权方式优点:
- 无状态、可扩展、适合分布式
- 性能高、安全性好,能够防止CSRF(跨站请求伪造),解决跨域问题
- Token鉴权时只需要客户端保存信息,减少了服务端对内存的消耗
- 对于手机APP端适应性好
- Token鉴权流程
相比于Session/Cookie鉴权,Token验证变动最大的就是需要自定义完成Token的生成和Token解析认证,不再是针对SessionId的验证和获取信息。
基于Token的鉴权方式的完整流程为:
- 客户端用户通过用户和密码进行首次登录
- 服务端接收用户请求,并验证用户名和密码的正确性,登录验证成功后根据自定义规则生成Token信息
- 服务端将生成的Token通过响应返回给客户端
- 客户端将Token信息存储在本地
- 客户端在之后的每次请求中携带Token信息
- 服务端针获取请求中的Token,并根据定义的验证机制判断Token合法性,验证成功获取用户信息,保持用户状态
- Token存活时间达到设置的有效期后自动失效,此后用户请求时Token验证不通过,需要用户重新登录验证
- Token的技术实现
当然,Token的实现上似乎还存有一些疑问:
- 类似Session/Cookie机制,但是所有都需要自己去实现,相当于从零开始,这也太复杂了
- Token信息若是存在Cookie中,这样的方式和Session/Cookie没有区别,Token方案中怎么解决
- 生成Token时如何保证数据的安全性
为了更好的解决这些问题,产生了一些基于Token方案的的技术实现,如:
- JWT
- OAuth
- 总结
Token势要打破Session/Cookie的鉴权机制,并形成一种自己的鉴权方案,为API接口鉴权提供更加安全、方便、高效、功能丰富的体验,后续我们就要慢慢揭开JWT这一基于Token的当下主流鉴权方案。
本文转载自: 掘金