自定义 JWT
在 NeuronEX 中调用 API 时,需先调用登录接口生成 JWT,再调用其他接口进行 JWT 验证。默认生成的 JWT 过期时间为一小时,可以自行生成 JWT,自定义过期时间。
当用户请求 RESTful API 时,请在 http 请求头中按以下格式输入 Token:
go
Authorization: Bearer
XXXXXXXXXXXXXXX
如果 Token 正确,NeuronEX 将响应结果; 否则,它将返回401
代码。
什么是 JWT?
JWT 是一种用于安全传输信息的开放标准(RFC 7519)。JWT 结构包含三个部分,分别是头部(Header)、载荷(Payload)和签名(Signature)。
NeuronEX 先根据 iss 字段查找 NeuronEX 安装目录下的子目录 etc 是否包含该名称对应的 .pem 或 .pub 文件,再根据里面的字段进行校验。NeuronEX 中所需要的 JWT 结构如下:
json
header
{
"alg": "RS256",
"typ": "JWT"
}
payload
{
"iss": "username",
"iat": "1679622798",
"exp": "1679626398",
"aud": "neuron",
"bodyEncode": "0"
}
头部
- 令牌类型(typ):使用 JWT
- 使用的算法(alg):使用 RS256
载荷
- 签发者(iss):根据需求自己定义,但要确保与生成的公钥文件名称一致。例如,iss 为 neuron,则需要生成 neuron.pem 的公钥文件。
- 签发时间(iat):签发时间
- 过期时间(exp):签发过期时间
- 受众(aud):NeuronEX,不能修改
生成公私钥
签发 JWT 前需要生成一对公私钥,并把生成的公钥 public.pem 放在 NeuronEX 安装目录下的子目录 etc 中。NeuronEX 自动加载 etc 中的文件,根据公钥解码。
TIP
Docker 以及 deb/rpm 安装包的默认安装路径为 /opt/neuronex
。
公钥文件名称必须要与 JWT 中的签发者保持一致。
使用 OpenSSL 命令行工具生成 RSA 密钥:
bash
# 生成私钥
$ openssl genrsa -out private.key 2048
# 生成公钥
$ openssl rsa -in private.key -out public.pem -pubout
如何生成 JWT?
使用 JWT 官网工具生成。在 Decoded 中填写:
- Algorithm:RS256
- Header:头部
- Payload:载荷
- Verify Signature:填写公私钥
-----BEGIN PUBLIC KEY-----
和-----BEGIN RSA PRIVATE KEY-----
。