主要观点:JSON Web Token 是用 JSON 对象编码一系列声明,可通过数字签名验证和信任,结构由 Header、Payload、Signature 三部分组成,常见签名算法有 HS256、RS256、ES256,HS256 虽安全但短密钥易被暴力破解,如使用 C 语言工具可在一定时间内破解,推荐使用 Auth0 的 512 位密钥或 RS256 算法。
关键信息:
- JWT 编码声明,可验证信任,签名算法多样。
- 结构:Header 含令牌类型和哈希算法,Payload 携带声明,Signature 由编码的 Header、Payload 和密钥签名组成。
- 常见算法及示例:HS256 基于 HMAC 和 SHA256,RS256 用 RSA 公钥算法,ES256 利用 ECDSA 算法。
- 暴力破解 HS256 JWT:可通过特定工具在一定时间内破解,因密钥过短易受攻击,推荐使用长密钥或 RS256 算法。
重要细节: - Header 示例:
{"alg": "HS256", "typ": "JWT"}
,Payload 示例:{"sub": "1234567890", "name": "John Doe", "manager": true}
。 - RS256 密钥生成:
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
,openssl rsa -pubout -in private_key.pem -out public_key.pem
。 - ECDSA 密钥生成:
openssl ecparam -name prime256v1 -genkey -noout -out ecdsa_private_key.pem
,openssl ec -in ecdsa_private_key.pem -pubout -out ecdsa_public_key.pem
。 - 暴力破解命令及示例:在 Mac 上安装
openssl
后运行make OPENSSL=/usr/local/opt/openssl/include OPENSSL_LIB=-L/usr/local/opt/openssl/lib
,克隆jwt-cracker
工具并运行time./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.cAOIAifu3fykvhkHpbuhbvtH807-Z2rI1FS3vX1XMjE
等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。