自定义 JWT

在 Neuron 中调用 API 时,需先调用登录接口生成 JWT,再调用其他接口进行 JWT 验证。默认生成的 JWT 过期时间为一小时,可以自己生成 JWT,自定义过期时间。

什么是 JWT?

JWT 是一种用于安全传输信息的开放标准(RFC 7519)。JWT 结构包含三个部分,分别是头部(Header)、载荷(Payload)和签名(Signature)。

Neuron 先根据 iss 字段查找 neuron 安装目录下的子目录 certs 是否包含该名称对应的 .pem 或 .pub 文件,再根据里面的字段进行校验。Neuron 中所需要的 JWT 结构如下:

  1. header
  2. {
  3. "alg": "RS256",
  4. "typ": "JWT"
  5. }
  6. payload
  7. {
  8. "iss": "username",
  9. "iat": "1679622798",
  10. "exp": "1679626398",
  11. "aud": "neuron",
  12. "bodyEncode": "0"
  13. }

头部

  • 令牌类型(typ):使用 JWT
  • 使用的算法(alg):使用 RS256

载荷

  • 签发者(iss):根据需求自己定义,但要确保与生成的公钥文件名称一致。例如,iss 为 neuron,则需要生成 neuron.pem 的公钥文件。
  • 签发时间(iat):签发时间
  • 过期时间(exp):签发过期时间
  • 受众(aud):neuron,不能修改

生成公私钥

签发 JWT 前需要生成一对公私钥,并把生成的公钥 public.pem 放在 Neuron 安装目录下的子目录 certs 中。Neuron 自动加载 certs 中的文件,根据公钥解码。

提示

Docker 以及 deb/rpm 安装包的默认安装路径为 /opt/neuron

公钥文件名称必须要与 JWT 中的签发者保持一致。

使用 OpenSSL 命令行工具生成 RSA 密钥:

  1. # 生成私钥
  2. $ openssl genrsa -out private.key 2048
  3. # 生成公钥
  4. $ openssl rsa -in private.key -out public.pem -pubout

如何生成 JWT?

使用 JWT 官网自定义 JWT - 图1 (opens new window)工具生成。在 Decoded 中填写:

  • Algorithm:RS256
  • Header:头部
  • Payload:载荷
  • Verify Signature:填写公私钥 -----BEGIN PUBLIC KEY----------BEGIN RSA PRIVATE KEY-----