JWT由三部分组成:头部,载荷和签名

您所在的位置:网站首页 蚕蛹分哪三部分 JWT由三部分组成:头部,载荷和签名

JWT由三部分组成:头部,载荷和签名

2024-01-12 16:26| 来源: 网络整理| 查看: 265

public static String createJWT(String secretKey, long ttlMillis, Map claims) {

    // 指定签名的时候使用的签名算法,也就是header那部分

    SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

    // 生成JWT的时间

    long expMillis = System.currentTimeMillis() + ttlMillis;

    Date exp = new Date(expMillis);

    // 设置jwt的body

    JwtBuilder builder = Jwts.builder()

            // 如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的

            .setClaims(claims)

            // 设置签名使用的签名算法和签名使用的秘钥

            .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))

            // 设置过期时间

            .setExpiration(exp);

    return builder.compact();

}

```

JWT由三部分组成:头部,载荷和签名

---

JSON Web Token (JWT) 是一种标准化的表示方式,用于在双方之间安全地传输信息。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

头部(Header): 头部包含两部分信息,描述令牌的类型(在 JWT 中,类型是 "JWT")和所使用的签名算法。

json

{

  "alg": "HS256",

  "typ": "JWT"

}

在这个例子中,SignatureAlgorithm.HS256 指定了使用 HMAC SHA-256 算法进行签名。

载荷(Payload): 载荷部分也被称为声明部分,它包含了要传递的数据。这些数据可以是任何内容,包括用户的身份信息、角色、权限等。

json

{

  "sub": "1234567890",

  "name": "John Doe",

  "admin": true

}

在这个例子中,载荷包含三个声明:sub(主题,通常表示用户唯一的标识符),name(用户名),和 admin(表示用户是否具有管理员权限)。

签名(Signature): 签名是用于验证 JWT 的完整性和防止篡改的部分。它使用头部和载荷的组合,通过指定的签名算法和密钥生成。签名算法用于确保数据的完整性,而密钥则用于生成签名。

在上面的代码中,签名部分是通过调用 signWith 方法生成的。该方法接受两个参数:签名算法和密钥。这里使用的是 HMAC SHA-256 算法和密钥的字节表示形式。

总的来说,JWT 的结构如下:

plaintext

[Header].[Payload].[Signature]

头部和载荷通过 . 连接,而签名则附加在头部和载荷之后。这样,接收者可以通过使用相同的算法和密钥来验证 JWT 的完整性和验证其内容的有效性。

---

 JWT(JSON Web Token)由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

头部(Header)部分指定了JWT的类型(typ)以及所使用的签名算法(alg)。它是一个由Base64编码的JSON字符串,包含了这些信息。在这段代码中,签名算法被指定为HS256,即采用HMAC SHA-256算法进行签名。

载荷(Payload)部分存放了实际的数据,也就是我们通常所说的“声明”。这些声明是一些关于实体(通常是用户)及其相关信息的声明,比如用户ID、角色、过期时间等等。在这段代码中,我们通过传入的claims参数来自定义载荷部分,可以自由地添加任意的键值对。

签名(Signature)部分是对前两部分的签名,用于验证消息的完整性和真实性。签名是使用指定的签名算法和密钥对头部和载荷进行加密得到的字符串。在这段代码中,我们使用密钥(secretKey)对头部和载荷进行签名。

所以,整个JWT由这三部分按照一定的规则组成的,经过Base64编码后形成了一个字符串。这个字符串可以被传递、存储,并且在需要验证身份、权限等方面起到关键作用。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3