zoukankan      html  css  js  c++  java
  • JWT的浅谈

    在实际工作过程中,运行jmeter脚本的时候,开发给了一个jwt的授权信息,到底是做什么用的呢,翻阅了一些资料,整理如下:

    一、JWT(Json Web Token)是什么

    JWT是一串格式为xxxx.xxxx.xxxxx的字符串,在服务器和客户端之间依靠JWT安全的传递一些不加密信息。

    这三个部分分别有自己的名称:header.payload.signature

    二、JWT的组成

    2.1:header格式如下:

    { 
    "typ":"JWT", 
    "alg":"HS256" 
    } 

    在这里面会说明编码对象是一个JWT,以及使用“HS256”的算法进行加密, 然后由base64将这一json进行转码,生成一串字符串。

    2.2:claim

    claim是一个json,里面放的是JWT自身的属性,参考这个博文 https://mp.weixin.qq.com/s/vwPyBkkHQZG-ibM1OkETZw中给出的数据说明:

    { 
    "iss":"Issuer —— 用于说明该JWT是由谁签发的", 
    "sub":"Subject —— 用于说明该JWT面向的对象", 
    "aud":"Audience —— 用于说明该JWT发送给的用户", 
    "exp":"Expiration Time —— 数字类型,说明该JWT过期的时间", 
    "nbf":"Not Before —— 数字类型,说明在该时间之前JWT不能被接受与处理", 
    "iat":"Issued At —— 数字类型,说明该JWT何时被签发", 
    "jti":"JWT ID —— 说明标明JWT的唯一ID", 
    "user-definde1":"自定义属性举例", 
    "user-definde2":"自定义属性举例" 
    } 

     划重点:JWT中可以标注JWT的过期时间,这个时间在测试中可以由开发提供一个超长时间的即可。

    然后将claim通过base64转码之后生成的一串字符串称作payload。

    2.3:signature

    将header与payload组合一起,生成一个字符串header.payload,然后再添加一个秘钥,这个是由服务器发的,用户不能看到,(服务器上也有一份相同的秘钥),用一定的加密方法进行加密,形成一个新的字符串,这个字符串就是signature,作用是确保JWT没有被篡改过。将新生成的字符串与前面的合在一起,就是JWT了。

    下面这个图就简便的说明了JWT的由来:

     

     三、JWT的使用流程

    客户端每次与服务器通信,都要带上这个 JWT。你可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求的头信息Authorization字段里面

    Authorization: Bearer <token>

    如果header部分和payload部分被篡改,由于篡改者不知道密钥是什么,也无法生成新的signature部分,服务端拿着原始的秘钥与最新的header和payload生成字符串,与客户端篡改后的不一致,也就无法通过。

  • 相关阅读:
    ubuntu下crontab启动,重启,关闭命令
    解决ubuntu16.04下boot空间不足的方法
    Go语言变量作用域
    Go语言函数
    xftp取消自动更新
    nginx下http如何转https访问
    mysql 5.7.22 zip安装
    微服务本机搭建
    微服务集成mybatis问题
    eclipse导入本地maven项目时,有的项目的结构是文件夹的机构
  • 原文地址:https://www.cnblogs.com/fish-101/p/10904331.html
Copyright © 2011-2022 走看看