您的位置:

JWT在线生成

JWT(JSON Web Token)是一种用于身份验证的开放标准,它可以将一些有用的信息封装到一个安全的、符合 JSON 格式的字符串中,因此在网络传输中比较常见。

一、JWT的生成方式

JWT 的生成分为以下三个步骤:

1、Header(头部信息):JWT 头部用于描述关于该 JWT 的最基本的信息,例如其类型以及所使用的加密算法等,基本上是固定的内容,格式如下:

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

2、Payload(荷载):JWT 的有效载荷部分主要为我们需要之间需要传递的信息,如用户ID、用户名、密码等数据信息。它的格式也是一个 JSON 对象,分为注册声明,公共声明和私有声明三种,注册声明建议(但不强制)要求使用,公共声明和私有声明可以根据需求加入。例如:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

3、Signature(签名):在生成签名时,你需要指定一个密钥,这个密钥只有服务器能够知道,然后使用你在 header 中指定的算法(例如 HS256),将 base64UrlEncode(header) + "." + base64UrlEncode(payload) 的结果进行加密处理,生成签名。签名可以保证 JWT 的可靠性。例如:

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

这三个基本的步骤是使用 JWT 的最基本的手动实现方式,但是,现在有很多成熟的 JWT 库可以用来生成 JWT。

二、在线生成

如果你只是想在线生成一些简单的 JWT,可以使用在线工具,例如 jwt.io。具体操作可以参考以下步骤:

1、打开jwt.io

2、设置Header信息

在左侧的输入框中输入JWT的Header信息,jwt.io会自动解析 Header 的内容,生成一个JSON格式的Header数据。

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

3、设置Payload信息

在下方的输入框中输入JWT的Payload信息,该块作为JWT用户身份信息的载体。以上图为例:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

4、设置Secret信息和Alg算法

在jwt.io右侧的输入框中,填入具体的加密算法和Secret。例如选择HS256加密方式,输入密钥“123456”,jwt.io会自动为您生成JWT Token结果,从而验证一下填入的信息是否正确。

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

三、自行开发JWT生成工具

当我们需要定制自己的JWT生成流程时,可以使用第三方工具库生成。下面示范一下如何使用 jsonwebtoken 库来生成一组 JWT:

1、安装 jsonwebtoken

npm install jsonwebtoken

2、引用 jsonwebtoken

const jwt = require('jsonwebtoken');

3、生成一个 JWT

const token = jwt.sign({ foo: 'bar' }, 'shhhhh');

上面代码生成一个 JWT。第一个参数是 Payload 提供的信息对象,第二个是一个密钥(字符串格式)。

jsonwebtoken 还允许你添加选项,详见 jsonwebtoken 的官方文档。相较于手动生成方式,使用第三方工具库可以使开发更加方便,并且对于安全问题,第三方工具库也一定程度上提供了保障。

四、小结

JWT 能够保证数据传输的安全性,同时具有数据简洁,低成本的特性。在线JWT生成工具可以帮助我们快速生成JWT,而自行开发 JWT 生成工具则可以根据业务需求实现自定义的生成需要,更加便捷。总体而言,这是一个十分实用的安全工具。