什么是JWT 叁歲伎倆 2023-05-28 05:13 32阅读 0赞 * 什么是JWT JSON Web Token(JWT)是一个开放的行业标准(RFC 7519),他定义了一种简介的,自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或这使用RSA的公钥/私钥对来签名,防止被篡改。 官网:[https://jwt.io/][https_jwt.io] 标准:[标准][Link 1] JWT的优点 1,jwt基于json,非常方便解析。 2,可以在令牌钟定义丰富的内容,容易扩展 3,通过非对称加密算法及数字签名技术,jwt防止篡改,安全性高 4,资源服务使用jwt可不依赖认证服务即可完成授权 缺点: 1,jwt令牌较长,占存储空间比较大 我们先看下传统的效验令牌的方法,如下图 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zMDQwOTkyNw_size_16_color_FFFFFF_t_70] 传统的授权方法的问题是用户每次请求资源服务,资源服务都需要携带令牌访问认证服务去效验令牌的合法性,并根据令牌获取用户的相关信息,性能不高。 JWT是用户认证通过会得到一个JWT令牌,JWT令牌中已经包含了用户的相关信息。客户端只需要携带jwt访问资源服务,资源服务根据约定的算法完成令牌效验,无需再次请求认证服务完成授权。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zMDQwOTkyNw_size_16_color_FFFFFF_t_70 1] * 令牌结构 jwt令牌由3部分组成,每部分中间使用(.)分割 * Header 头部包括令牌的类型(即JWT)及使用的哈希算法(如HMAC SHA256或RSA) { "alg": "HS256", "typ": "JWT" } * `Payload` 第二部分是负载,内容也是一个json对象,它是存放有效信息的地方,它可以存放jwt提供的现成字段,比 如:iss(签发者),exp(过期时间戳), sub(面向的用户)等,也可自定义字段。 此部分不建议存放敏感信息,因为此部分可以解码还原原始内容。 最后将第二部分负载使用Base64Url编码,得到一个字符串就是JWT令牌的第二部分。 { "sub": "1234567890", "name": "456", "admin": true } * Signature 第三部分是签名,此部分用于防止jwt内容被篡改。 这个部分使用base64url将前两部分进行编码,编码后使用点(.)连接组成字符串,最后使用header中声明 签名算法进行签名。 HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) base64UrlEncode(header):jwt令牌的第一部分。 base64UrlEncode(payload):jwt令牌的第二部分。 secret:签名所使用的密钥。 [https_jwt.io]: https://jwt.io/ [Link 1]: https://tools.ietf.org/html/rfc7519 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zMDQwOTkyNw_size_16_color_FFFFFF_t_70]: /images/20230528/9fc966483ca84e99a80456c2c5e3aa77.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zMDQwOTkyNw_size_16_color_FFFFFF_t_70 1]: /images/20230528/f69c188a7b13449fad2fbccea7f6db76.png
还没有评论,来说两句吧...