美文网首页
通关令牌token

通关令牌token

作者: leeleeleelalala | 来源:发表于2020-02-03 23:00 被阅读0次

    传统token校验

    实现过程

    1. 从前台登录页面输入用户名密码
    2. 后台拿到用户名密码后去数据库(或者redis)查询该用户是否存在,
      • 存在则生成一个随机字符串作为token保存起来(同时也可以保存一下失效时间),并返回登录成功和token给前台
      • 不存在则返回登录失败到前台
    3. 下次前台发送请求到后台的时候携带token进行身份认证,后台拿到token之后,与之前保存的token做比较,一致则认证通过,否则认证失败,去登录页面

    弊端

    1、token需要保存到后台数据库或者缓存,耗费资源

    JWT【Json web token】

    1、JWT是什么

    首先JWT是一个规范,什么规范呢,它一个基于JSON的用来传递安全信息的规范。

    2、组成

    JWT由三个部分组成:

    • 头部(Header):包含了JWT最基本的信息,一般主要是类型和加密算法。
      例如:
    {"typ":"JWT","alg":"HS256"}
    
    • 载荷(playload):是一个存放了我们的有效信息的json对象,那这个json里面有哪些信息呢,它里面包含我们想要传递的信息(也叫声明Claim),JWT标准给我们定义了一些可选的标准声明如下:
    iss: jwt签发者
    sub: jwt所面向的用户
    aud: 接收jwt的一方
    exp: jwt的过期时间,这个过期时间必须要大于签发时间
    nbf: 定义在什么时间之前,该jwt都是不可用的.
    iat: jwt的签发时间
    jti: jwt的唯一身份标识,主要用来作为一次性token。
    

    其他的我们也可以自己加上自己想要传递的声明,比如用户名,用户id之类的,但是不要放敏感信息在里面,因为这部分是可以被解密的。
    例如:

    {"iss":"guapi","userId":"001","userName":"小七"}  
    
    • 签证(signature): 这个部分是用来校验JWT的,你需要在你的服务器偷偷的设定secret盐
    part1 = base64.encode(header)
    part2 = base64.encode(payload)
    part3 = 用header中指定的加密方式对(part1+"."+part2)进行加盐加密
    signature = part1 + "." + part2 + "." + part3
    组装这三个,恭喜你就成功的生成了自己的JWT对象
    

    你可以试一下在不知道secret的时候,你修改任何一个部分都会导致JWT在服务器端解析失败的。

    3、总结

    所以JWT是安全的;一旦被签发就无法被篡改的(不知道secret的情况下);不需要存储可以自校验的很好的传统TOKEN的替代方案。

    哈哈,写完啦,写完啦,权限的冰山一小角A
    请大家期待其他的冰山一小角B,C,D....

    相关文章

      网友评论

          本文标题:通关令牌token

          本文链接:https://www.haomeiwen.com/subject/xupcxhtx.html