权限管理--笔记

130 阅读2分钟

权限管理

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

什么是JWT?

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名

JWT的组成

Header、Payload、Signature

header头部

头部包含了2部分,token类型和采用的加密算法

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

Payload负载

存放信息的地方, 可以把用户的id等信息放在这里,

常用的由 iss(签发者),exp(过期时间),sub(面向的用户),aud(接收方),iat(签发时间)

  {
      "iss": "lion1ou JWT",
      "iat": 1441593502,
      "exp": 1441594722,
      "aud": "www.example.com",
      "sub": "lion1ou@163.com"
  }

Signature签名

Signature签名前⾯两部分都是使⽤ Base64 进⾏编码的,即前端可以解开知道⾥⾯的信息。

Signature 需要使⽤编码 后的 header 和 payload 以及我们提供的⼀个密钥,然后使⽤ header 中指定的签名算法(HS256)进 ⾏签名。签名的作⽤是保证 JWT 没有被篡改过。 三个部分通过 . 连接在⼀起就是我们的 JWT 了,它可能⻓这个样⼦,⻓度貌似和你的加密算法和私钥 有关系。

 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9`.`eyJpZCI6IjU3ZmVmMTY0ZTU0YWY2NGZmYzUzZGJkNSIsInhzcmYiOiI0ZWE1YzUwOGE2NTY2ZTc2MjQwNTQzZjhmZWIwNmZkNDU3Nzc3YmUzOTU0OWM0MDE2NDM2YWZkYTY1ZDIzMzBlIiwiaWF0IjoxNDc2NDI3OTMzfQ`.`PA3QjeyZSUh7H0GfE0vJaKW4LjKJuC3dVLQiY4hii8s

签名的目的

实际上是对头部以及负载内容进行签名,防止内容被窜改。如果有人对头部以及负载的内容解码之后进行修改,再进行编码,最后加上之前的签名组合形成新的JWT的话,那么服务器端会判断出新的头部和负载形成的签名和JWT附带上的签名是不一样的。如果要对新的头部和负载进行签名,在不知道服务器加密时用的密钥的话,得出来的签名也是不一样的。

为什么使用JWT

传统认证方式

image-20211130223547505.png

JWT认证

image-20211130223705964.png

JWT使用

  1. 授权中心和资源中心持有私钥和公钥

image-20211130223831603.png

  1. 私钥颁发令牌

image-20211130224000233.png

  1. 公钥验证令牌

image-20211130224020202.png