JWT(Json web token)

首先了解一下JWT使用过程:
Token 是服务器端在验证客户端user_id/pwd 没问题后, 签发给客户端的, 作为标示该用户的一个令牌, 之后客户端就使用该令牌和服务器端进行交互.  

Token的根本作用:
就一点: 用于服务器端标示是哪个用户的请求

JWT 安全吗?
基本上很安全, 否则就没有人用了, 具体分析:
1. JWT 令牌可以防止信息伪造, 服务器在生成token中的signature部分, 可以使用一些高级的加密算法, 比如使用HMAC算法 + Secret key, 因为Secret key是只有服务器知道, 所以别人仿造不了. 随意仿造, JWT token的完整性就改变了.
2. JWT 令牌可以防止重放攻击. JWT不好伪造, 如果整个token被人直接套牌不也可以吗? token中增加失效期设置, 这样就缩小了重放攻击的窗口.
3. token 作为 http head的 authentication 取值, 本身是明文的, 可以上 https, 这样 token 也被加密了. 在公网下, https是必须的, 尤其是登录环节, 明文提交用户名/密码明文太可怕了.

关于防止被套牌, 除了增加失效期属性, 还可以做进一步工作, 具体为:
  客户端请求令牌时候, 不仅需要提交 user_id/pwd, 而且需要提交一个 device_id, 也就是说 user_id对应一个有效的令牌, 同时在server端的user表中将token和device_id都存下来, 如果下次客户端来自其他设备, 查询 user表中的token和device_id, 如果请求中的token或device_id和user表不一致, 清空user表的token, 即在服务器端强制标记该token失效.
  除非安全要求很严, 否则不推荐这么复杂的作法,JWT的token本来可以在server端通过算法验证的, 不需要查询数据表, 而现在引入了数据表, 如果觉得这个方式丑陋, 可以持久化到redis而不是user表中.
 

================================
更多文档  
================================
基于Token的WEB后台认证机制 http://www.cnblogs.com/xiekeli/p/5607107.html
JSON Web Token (JWT) 简介 https://mozillazg.github.io/2015/06/hello-jwt.html
jwt官网 https://jwt.io

posted @ 2017-04-14 19:30  harrychinese  阅读(942)  评论(0编辑  收藏  举报