JWT 解码

在浏览器里解码 JWT、校验签名,或签一枚测试令牌。支持 HMAC、RSA 和 ECDSA。令牌不会上传。只有点了用 JWKS 验签,浏览器才会去取公钥。

令牌

头部 载荷 签名

JWKS 地址

用 JWKS 验签时,浏览器只去这个地址取公钥,令牌仍留在本页。对方必须允许浏览器访问。

安全审计

    签名

    看令牌、验签,或签一枚测试令牌

    JWT 是三段 Base64url:头部、载荷、签名。头部和载荷是 JSON,没有加密,拿到令牌的人都能读。签名用来说明载荷没被改过,前提是你有 HMAC 密钥或公钥。这一页在浏览器里解码、验签和生成。它会标出 alg 为 none、缺少或已到点的 exp、把时间写成毫秒,以及短于 32 字节的 HMAC 密钥。令牌不上传。哈希页上的校验和不是 JWT 签名。exp 是按秒计的 Unix 时间,换时区到 时间戳 页。

    怎么用

    1. 令牌在左边。右边的头部和载荷是两个标签。勾着边输入边更新时,两个框都会填上。载荷下面的时间是这台电脑的本地时间。没有宽限:exp 等于或早于现在,就标成已过期。
    2. 显示示例会放入一份 HS256 令牌,载荷是 {"sub":"user-1"},HMAC 密钥是 secret。密钥是 Base64 不勾。点验签会说签名一致。安全审计会说密钥只有 6 字节,而且没有 exp。示例故意用短密钥。
    3. 验签看的是令牌框,不是头部或载荷里还没生成的修改。HS256、HS384、HS512 用 HMAC 密钥。RS、PS、ES 用算法下面的密钥对:公钥验签,私钥生成。点生成密钥会填上这两把。生成 JWT 用这两个框重签。算法菜单优先于头部里写的 alg。
    4. 过期默认是保留声明,生成 JWT 不会改 iat 和 exp。选 1 小时再生成,会按现在的秒数写上这两项。模板里的用户会填 sub 1234567890、name John Doe、email [email protected]。访问会填 sub user-1 和 scope read。
    5. 令牌下面的复制只复制令牌。头部或载荷上的复制只复制那一框。用 JWKS 验签会让这个浏览器去 JWKS 地址取公钥,不发送令牌。全部清除会清掉令牌、两个 JSON 框、密钥、钥匙和地址。

    校验到哪一步

    HS256、HS384、HS512 用密钥。短于 32 字节也能签,审计会警告。只有密钥本身是 Base64 时才勾密钥是 Base64。RS256、RS384、RS512、PS256、PS384、PS512、ES256、ES384、ES512 用 PEM 或 JWK。公钥用来验签。PKCS#8 私钥用来生成。RSA 私钥里带着公钥,也可以拿来验签。可以贴 SPKI(BEGIN PUBLIC KEY)、PKCS#8(BEGIN PRIVATE KEY)或 PKCS#1 的 RSA。证书会被拒绝。写着 BEGIN EC PRIVATE KEY 的 EC 钥匙也会被拒绝,请导出成 PKCS#8。alg 为 none 不会当成有效。验签以头部里的 alg 为准。HMAC 密钥不会拿去验 RSA。 exp、nbf、iat 都是秒。十三位数字只提示,不换算。JWKS 要是一组钥匙,或单独一把 JWK。有多把却没有 kid 会报错。头部或载荷若是数组,生成 JWT 会停住。

    什么时候用

    • 看手里这份令牌的 sub 和 exp。
    • 给自己设了密钥的本地服务签一个 HS256。
    • 用公钥 PEM,或用允许浏览器访问的 JWKS 地址,核对 RS256。
    • 在把测试密钥写进配置之前,先看到它太短。

    常见问题

    载荷加密了吗?

    没有。那只是 Base64url。密码、身份证号、银行卡号不要放进去。

    验签失败先看什么?

    令牌要有两个点,两段都是 JSON。头部的 alg 得是这一页认识的。HS 要用签发时的同一把密钥,密钥是 Base64 的勾选也要和密钥的存法一致。RSA 和 EC 要公钥,不是证书。exp 过了是安全审计里的警告,不是签名对不上。

    HS256 和 RS256 怎么选?

    HS256 是一把共享密钥。RS256 用私钥签发、公钥验签。不要把 HMAC 密钥交给别的服务,交给他们公钥。

    alg 为 none 是什么?

    头部表示没有签名。这一页不会把它当成有效令牌。

    令牌泄露了,这一页能作废吗?

    不能。把签发方的 exp 设短,或在签发方做失效名单。

    贴到这里安全吗?

    验签在浏览器里完成。用 JWKS 验签是唯一的请求,而且只下载公钥,不上传令牌。即便如此,也不要在共用电脑上粘贴还在生效的生产令牌。时间差了几个小时的话,数字本身是 UTC,载荷下面那一行是这台电脑的钟。