JWT
使用场景:(自己总结的,每次请求携带token,然后到服务端验证token是否正确,是否过期,然后解码出携带的用户信息。服务端不需要再存储session信息,避免多点部署带来session处理的问题。 适合做无状态用户请求用户验证,避免存储session)
介绍:
https://jwt.io/introduction/
http://www.jianshu.com/p/576d...
http://www.jianshu.com/p/fcc1...
总结
优点
因为json的通用性,所以JWT是可以进行跨语言支持的,像JAVA,JavaScript,NodeJS,PHP等很多语言都可以使用。
因为有了payload部分,所以JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。
便于传输,jwt的构成非常简单,字节占用很小,所以它是非常便于传输的。
它不需要在服务端保存会话信息, 所以它易于应用的扩展
缺点
- 一旦拿到token, 可用它访问服务器,直到过期,中间服务器无法控制它,如是它失效(有解决方案: 在 token
中保存信息,可添加额外的验证,如加一个 flag, 把数据库对应的flag失效,来控制token有效性)。
- token的过期时间设置很关键,一般把它设到凌晨少人访问时失效,以免用户使用过程中失效而丢失数据。
- token保存的信息有限,且都是字符串。
安全相关
不应该在jwt的payload部分存放敏感信息,因为该部分是客户端可解密的部分。
保护好secret私钥,该私钥非常重要。
如果可以,请使用https协议
有人提到jwt暴露签名算法(alg),而且会有None(无签名),所以建议隐去alg。一般的协议制定都会考虑扩展性和普适性。但是我们在应用中可以采用我们默认的算法,而不是根据alg去处理。
作者:Dearmadman
链接:http://www.jianshu.com/p/576dbf44b2ae
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
---------------------
作者:o王o
来源:CSDN
原文:https://blog.csdn.net/u012129607/article/details/78685356
版权声明:本文为博主原创文章,转载请附上博文链接!
今天讨论的主要是 token过期时间的问题
参考 :https://stackoverflow.com/que...
我们的解决方法是:
要求:
①一个账号仅能有一个token可以使用。
②token设置过期时间
③每次登录,包括token登录都返回一个可用的token给客户端,保证合理登录的用户都可以用token,实现token不会过期的效果。
思路:
function 刷新toke()
{
token登录和正常账号密码登录:
判断该用户(在redis中)是否已经有token,然后判断这个token创建时间是否当日创建的,如果是当日创建的。则直接返回该token给客户端。非当日创建的,重新生成一个新token给客户端
redis中保存数据结构 token_account_id:111 ['token'=>'aaa' , 'create_time' =>1500000];
}
function 根据token获取用户信息(token)
{
判断token对错=》是否过期=》解析出用户信息;
到redis中查该用户 请求的token 和 redis存的token是否一致,不一致不允许token登录,
再次根据创建时间,判断这个token是否可以用(主要防止修改密码和注销操作的token没失效问题)
最后返回用户信息
}
修改密码和注销。直接将redis中该用户的信息过期。下次通过token登录,会提醒token失效,要重新登录,我们重新生成一个新的token给用户,然后balaball。。通过redis存储token,实现 token过期失效的问题了。
jwt采用 H256加密算法demo:https://github.com/postbird/j...
采用RSA加密算法demo http://blog.csdn.net/u0121296...
作者:o王o
来源:CSDN
原文:https://blog.csdn.net/u012129...
版权声明:本文为博主原创文章,转载请附上博文链接!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。