JWT 生成

用密钥签发 HS256 JWT 令牌。

什么是JWT 生成?

JWT(JSON Web Token)是一种紧凑的、自包含的令牌格式,由 Header、Payload、Signature 三部分组成,用英文句点拼接并做 Base64URL 编码。这个工具用于生成 HS256(HMAC-SHA256)算法签名的 JWT:填入 Payload(如用户 ID、过期时间 exp、签发时间 iat 等声明)和密钥(Secret),即可签发一个带签名的 Token 字符串,服务端可用同一密钥验证该 Token 是否被篡改。

为什么使用JWT 生成?

JWT 常用于无状态的身份认证——用户登录后服务端签发 Token,后续请求带上 Token,服务端无需查数据库或 Session 即可通过验证签名判断用户身份和权限,适合前后端分离、微服务、移动端 API 等场景。相比传统 Session 需要服务端存储状态,JWT 把状态放进了 Token 本身,便于横向扩展;但也因此有"签发后无法主动吊销"的缺点,需要配合过期时间(exp)和黑名单机制使用。该工具常与"JWT 解析"工具配合:一个用来签发测试 Token,一个用来解码调试线上收到的 Token。

使用示例

生成一个测试用登录态 Token

Payload 填 {"sub":"1001","name":"张三","role":"admin","exp":1735689600},密钥填 my-secret-key,选择 HS256 算法,生成后得到形如 eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMDAxIn0.xxxx 的三段式字符串,可直接放进 Postman 的 Authorization: Bearer 头做接口联调测试。

设置过期时间

exp 声明是 Unix 时间戳(单位为秒),表示 Token 过期时刻;例如当前时间戳加 3600 表示 1 小时后过期,服务端验证库会自动比对 exp 与当前时间来判断 Token 是否已失效。

用同一密钥验证签名

把生成的 Token 和签发时用的密钥一起交给"JWT 解析/校验"功能,若签名校验通过说明内容未被篡改;换一个错误密钥校验则会失败,这正是 JWT 防篡改的核心机制。

使用提示

切勿把生产环境使用的真实密钥粘贴到任何在线工具中(即便声称本地处理),测试联调请使用专门的测试密钥,且注意 exp 应使用秒级 Unix 时间戳而非毫秒。

常见问题

这里生成的是哪种算法的 JWT?
使用 HS256(HMAC-SHA256)对称签名算法:将 Header 与 Payload 分别做 Base64URL 编码后用「.」拼接,再用密钥计算 HMAC-SHA256 签名并追加,得到完整 JWT。
Header 需要自己填 alg 和 typ 吗?
需要。为方便理解与自定义,Header/Payload 均由你以 JSON 形式输入,工具只负责编码与签名,不会自动修改你填写的字段。
密钥和数据会上传服务器吗?
不会。全部使用浏览器内置 Web Crypto API(crypto.subtle)在本地完成编码与签名。
这个 Token 安全吗,别人能看到 Payload 内容吗?
JWT 的 Payload 只是 Base64URL 编码,并未加密,任何人拿到 Token 都能直接解码看到里面的字段内容,因此不要在 Payload 里放密码等敏感信息;签名的作用是防止内容被篡改,不是保密。
HS256 和 RS256 有什么区别?
HS256 是对称算法,签发和验证用同一个密钥,密钥必须严格保密,适合单体后端自签自验;RS256 是非对称算法,用私钥签名、公钥验证,适合需要把验证能力开放给第三方而不暴露签发密钥的场景,本工具目前生成的是 HS256 类型。
生成的 Token 可以直接在生产环境使用吗?
本工具适合本地联调、写文档示例、理解 JWT 结构,生产环境的密钥应使用足够强的随机值并通过环境变量或密钥管理服务配置,不建议把生产密钥输入到任何网页工具中。
为什么相同 Payload 每次生成的 Token 不完全一样?
如果 Payload 里包含 iat(签发时间)等随时间变化的字段,或字段顺序、JSON 序列化方式不同,都会导致最终字符串不同,但只要密钥和有效声明一致,签名校验结果应当一致。

相关工具

← 返回工具箱· 数据均在浏览器本地处理,不上传服务器。