zoukankan      html  css  js  c++  java
  • JWT

    JWT 的原理

    服务器认证后,发送一个JSON对象给用户。之后用户与服务器通信的时候,都要发回这个JSON对象。同时,为了防止用户篡改数据,服务器生成这个数据的时候,会加上签名。

    JWT 的数据结构

    它是一个很长的字符串,中间用点(.)分隔成三个部分。

    三个部分一次如下:

    • Header(头部)
    • Payload(负载)
    • Signature(签名)

    Header

    JSON对象,描述 JWT 的元数据

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

    alg表示签名的算法,默认是 HMAC SHA256(写成 HS256)

    typ表示令牌的token类型,JWT令牌统一写为JWT

    最后使用Base64URL 算法将他转换成字符串

    Payload

    JSON对象,用来存放实际需要传递的数据。

    7个官方字段:

    • iss (issuer):签发人
    • exp (expiration time):过期时间
    • sub (subject):主题
    • aud (audience):受众
    • nbf (Not Before):生效时间
    • iat (Issued At):签发时间
    • jti (JWT ID):编号

    也可以定义私有字段,但不能存放私密字段,除非是加密的

    最后使用Base64URL 算法将他转换成字符串

    Signature

    对前两部分的签名,防止数据篡改

    首先,指定一个只有服务器才知道的密钥secret,之后使用header中的签名算法使用如下方式产生签名,默认(HMAC SHA256)

    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      secret)

    最后将以上三部分字符串拼接,拼接处用.分隔

    Base64URL

    类似于Base64,但是有些小的不同。

    JWT令牌可能会放在URL中,Base64 有三个字符+/=,在 URL 里面有特殊含义,所以要被替换掉:=被省略、+替换成-/替换成_ 。这就是 Base64URL 算法。

    JWT 的使用方式

    (1)放在客户端的cookie或localStroage中,放在cookie中每次请求都会自动发送,但是不能跨域

    (2)放在请求头信息Authorization字段里面

    (3)放在post请求体中

    JWT 的几个特点

    (1)JWT默认时不加密的,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。不加密的情况下,不能将秘密数据写入JWT

    (2)JWT不仅可以用于认证,也可以用于交换信息

    (3)为减少盗用,JWT不应该用HTTP明码传输,而使用HTTPS,对于比较重要的权限,应该进行二次验证

    (4)JWT的缺点,由于保存在客户端,因此服务端在token到期之前是不可控的,尽量减短token的过期时间



  • 相关阅读:
    Postman+Newman+Git+JenKins+钉钉(接口自动化测试持续集成)CI_知识回顾与整理
    GitHub 使用入门
    python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分
    python实现:重复列表按重复次数排序
    python中lambda匿名函数的用法
    Python中各种符号的意义
    OSI七层协议和TCP/IP的4层、5层协议
    Jmeter中传参输入位置[chrome中区分是否json传参]
    Jmeter中http cookie Manager、Http Header Manager
    jQuery 获取屏幕高度、宽度
  • 原文地址:https://www.cnblogs.com/goOtter/p/10107344.html
Copyright © 2011-2022 走看看