JWT详解

一、简单介绍

JSON Web Token (JWT)是一个开放行业标准,其RFC标准记录在RFC 7519中,JWT本质上是一个字符串,JWT标准常用于认证(authentication)、授权(Authorization)、安全信息交换(Information Exchange)领域。

二、JWT 构成

JSON Web Token (JWT) 由Header、Payload、Signature三部分组成,这三部分由.(dot)分隔开。所以一个JWT字符串通常如下所示 :
xxxxxx.yyyyyy.zzzzzz

1、Header

header一般包含两部分:token的类型,一般是JWT;签名(sign)的算法,一般是HMAC、SHA256 或者 RSA等,举例如下:

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

该JSON数据会被Base64Url 编码,编码之后的字符串作为Token的第一部分xxxxxx;Base64Url与Base64相关介绍在另一篇文章中。

2、Payload

Token的第二部分是payload,payload包含claims(声明),claim一般包含用户数据和其他额外的数据。claim一般分为三种:registered, public, and private claims。

Registered claims(注册声明)

这部分声明是预定义的声明,这些声明不是必需的,但是建议使用,以提供一组有用的、可互操作的声明。相关的声明如下:

claim 描述
iss (Issuer) Claim,确定签发者的身份,谁签的该token,即该服务器的地址
sub (Subject) Claim, jwt所面向的用户
aud (Audience) Claim

该JSON数据会被Base64Url 编码,编码之后的字符串作为Token的第二部分yyyyyy。

3、signature(签名)

这一部分需要Base64Url 加密后的header和Base64Url 加密后的Payload,并将两者用dot(.)连接起来,组成一个签名前的字符串;然后使用加密算法加上secret或者公私钥加密成签名。该签名将作为Token的第三部分zzzzzz。
在实际应用中,因为Header和Payload会存储很多数据,如果再使用加密算法,生成的数据会更多,这无疑会降低传输效率,所以更常见的用法是先将Header和Payload做数字摘要,然后对数字摘要加密,这样数据量会降低很多。在JWT中有两种签名方式,一种是使用对称加密算法配合secret(盐)进行加密,加解密都会使用到该secret,另一种方式使用非对称加密,通常是服务器使用私钥签名,然后随着请求处理再用公钥验证

三、使用

JWT通常使用在http服务中,用作认证和授权,并且不存储在cookie中,因为使用cookie认证有访问域的限制,而是放在http请求头部,这样的话并没有访问域的限制,并且不需要seesion的参与形式如下:

## Bearer token两者之间是一个空格
Authorization: Bearer token

引用

JWT RFC 7519

相关推荐

  1. <span style='color:red;'>JWT</span><span style='color:red;'>详解</span>

    JWT详解

    2024-01-17 11:50:04      41 阅读
  2. JWT详解

    2024-01-17 11:50:04       56 阅读
  3. HTTP API 认证技术详解(三):JWT Authentication

    2024-01-17 11:50:04       45 阅读
  4. JWT详解、JWTUtil工具类的构建方法

    2024-01-17 11:50:04       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-17 11:50:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-17 11:50:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-17 11:50:04       82 阅读
  4. Python语言-面向对象

    2024-01-17 11:50:04       91 阅读

热门阅读

  1. nginx配置中关于try_file的一些问题

    2024-01-17 11:50:04       50 阅读
  2. python-pip命令学习-改为国内镜像源

    2024-01-17 11:50:04       52 阅读
  3. Hive架构设计

    2024-01-17 11:50:04       52 阅读
  4. Hive调优一文打尽

    2024-01-17 11:50:04       51 阅读
  5. Hive条件函数详细讲解

    2024-01-17 11:50:04       51 阅读
  6. Hive日期函数详细讲解

    2024-01-17 11:50:04       47 阅读
  7. hive除数取整

    2024-01-17 11:50:04       56 阅读
  8. 日常美食DIY教程之三,鱼香杏鲍菇的食材与做法

    2024-01-17 11:50:04       45 阅读
  9. RabbitMQ如何保证消息不丢失?

    2024-01-17 11:50:04       51 阅读
  10. 2023科技风暴:AI璀璨之旅与算法备案护航

    2024-01-17 11:50:04       57 阅读
  11. PHP 数据类型面试题

    2024-01-17 11:50:04       50 阅读
  12. vue 实现 全部页全部选

    2024-01-17 11:50:04       54 阅读