1

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...
版权声明:本文为博主原创文章,转载请附上博文链接!


winsonink
29 声望0 粉丝

Late better than never