生态第三方包

言签:JWT

言签 1.0 的固定 HS256、二进制密钥、标准声明策略和本地 kid 轮换。

言签(yanxu-jwt1.0.0 是纯言序的 JSON Web Token 库。它固定使用 HS256,不根据不可信头部选择算法;签名基于标准库 HMAC-SHA-256 与恒时比较,并支持文字或二进制密钥、本地 kid密钥集轮换和严格标准声明策略。

版本与安装

项目稳定值
包名言签
版本 / 公开标签1.0.0 / v1.0.0
最低言序1.1.6
依赖
构建目标字节码
yanbao add 言签 \
  --git https://github.com/yanxulang/yanxu-jwt.git \
  --rev v1.0.0 \
  --version '^1.0'
[依赖]
言签 = { git = "https://github.com/yanxulang/yanxu-jwt.git", 修订 = "v1.0.0", 版 = "^1.0" }

提交生成的 言序.lock。生产密钥不应出现在清单、锁文件、源码或日志中。

核心能力:签发带标识的标准令牌

「包:言签」 言签;

# 仅为文档示例;生产密钥必须由密码学安全随机源生成。
 当前密钥: 「abcdef0123456789abcdef0123456789」

 令牌: 言签.签发标准带标识
    {「role」「editor」},
    当前密钥,
    「2026-07」
    {
        「当前秒」1700000000
        「有效秒」900
        「iss」「auth.example」
        「aud」:【「web」「mobile」】,
        「sub」「user-42」
        「jti」「session-42」
    }
);

签发标准…自动构造 iatnbfexp,并合并可选的 issaudsubjti。第一个附加声明参数不得覆盖这些标准声明,避免业务载荷绕过签发策略。

若密钥来自 KMS、二进制配置或安全随机源,应保留为字节串并使用带字节密钥后缀的签发与验证入口;只有明确是 UTF-8 文本的密钥才使用文字密钥入口。

验证与安全轮换

 密钥集: {
    「2026-01」:旧密钥,
    「2026-07」:当前密钥
};

 声明: 言签.验证密钥集(令牌,密钥集,{
    「当前秒」1700000100
    「时差秒」30
    「签发者」「auth.example」
    「受众」「web」
    「主题」「user-42」
    「密钥标识」「2026-07」
    「需要过期」
    「需要签发时间」
    「需要生效时间」
    「需要编号」
    「最大寿命秒」900
    「必需声明」:【「role」
});

 声明【「role」】;

密钥集必须来自受信任本地配置,并包含 1–64 项。未知或缺失 kid立即失败,不会回退到任意密钥。安全轮换顺序是:

  1. 先把新密钥加入所有验证方;
  2. 再让签发方改用新的 kid
  3. 等待旧令牌最大寿命加允许时差;
  4. 最后从验证方移除旧密钥。

验证成功才返回声明。测试和回放应显式传当前秒;生产可使用读取系统时间的便捷验证入口,但仍应配置固定签发者、受众、主题、必需时间声明和最大寿命。

公共接口

能力入口
URL Base64编码字节解码字节编码文字解码文字
直接签发签发签发字节密钥签发带标识及字节密钥版本
标准声明签发签发标准签发标准带标识及字节密钥版本
解析解析未验证
单密钥验证验证验证配置及字节密钥版本
轮换验证验证密钥集
错误错误详情

URL Base64 使用无填充规范形式;解码会拒绝 =填充、非法字符、错误长度和非规范尾位。紧凑令牌固定为三段,头部和载荷必须是 JSON 对象。

错误、权限与安全边界


 声明  言签.验证密钥集(令牌,密钥集,策略);
 所误 
 详情: 言签.错误详情(所误);
 详情【「代码」】;

错误使用稳定 YANQIAN_*代码。服务可以把代码统一映射为 401 或 403,并只在脱敏的服务端日志中保留必要诊断;不要回显详细解析差异、完整令牌或密钥。

边界1.0 值
令牌最大长度32768 字符
HS256 密钥32–4096 字节
kid1–128 个受限 ASCII 字符
允许时差0–300 秒
NumericDate非负安全整数,最大 9007199254740991
必需声明最多 32 项

言签无第三方依赖,不申请文件、网络、监听、环境、进程或原生扩展权限。Python 互操作测试只用于发布验证,不是运行时依赖。

解析未验证与已知限制

解析未验证只检查紧凑格式、URL Base64、UTF-8 与 JSON 对象,返回的头部、声明和分段仍完全受攻击者控制。它只适合诊断或互操作测试,绝不能参与认证、授权、数据库过滤或远程密钥选择。

此外:

  • 1.0 只支持 HS256,不提供 RSA、ECDSA、EdDSA、none或算法协商。
  • 不读取远程 JWK,也拒绝依赖 jkujwkx5ux5c的密钥选择。
  • 密钥存储、分发、撤销、会话状态和重放防护由应用负责。
  • aud可为文字或非空文字列;其他身份声明要求非空文字,时间声明拒绝小数、负数和溢出。
  • 生产中应使用短寿命令牌,并把验证后的声明与服务端授权和撤销状态结合。

项目链接