JWT (Json Web Token)是符合RFC 7519标准的、能够以URL安全的方式交换压缩的JSON对象。
相对于使用XML格式的SAML,JWT使用JSON格式,数据压缩效率更高。相对于SWT只能使用对称加密的签名,JWT使用公钥/私钥和X.509证书更安全。
JWT主要用于认证,使得服务端能够直接验证用户身份而无需存储会话数据,是无状态应用的理想选择。
JWT的结构
以dots分割的3个Base64URL编码,分别表示Header, Payload, Signature。
xxxxx.yyyyy.zzzzzHeader说明token类型(即JWT ),和签名算法(如HMAC算法+SHA256, ECDSA或RSA)。
{ "alg": "HS256", "typ": "JWT" }Payload是声明entity(即用户数据)和其他metadata(如过期时间)。
Payload中包含的声明有三种类型,registered, public, 和private。public声明供用户按需定义使用。private声明是定制的声明,用于分享信息。
其中,registered声明是预定义的一组互操作声明,可选但是推荐使用,包括:
- iss(issuer)
- exp(expiration time)
- sub(subject)
- aud(audience)
- others
{ "sub": "1234567890", "name": "Taiyangdao", "admin": true, "iat": 1516239022 }Signature确保token有效,是根据Header和Payload的内容,结合签名算法,使用密钥生成。
JWT的使用
在HTTP请求的Header中设置Authorization属性:
Authorization: Bearer <JWT_token>受HTTP Header的大小限制(通常不大于8kB),JWT_token中不能存储太多信息。如果要将用户的Roles也保存到JWT_token中,推荐使用Auth0 Fine-Grained Authorization (FGA)。
生成Token
curl --noproxy '*' -X POST -H Content-Type:application/json -d '{"username":"champagne", "password":"***"}' https://api.internal.com/auth/login
使用Token
curl -XGET--header 'Content-Type: application/json'-H 'Authorization: Bearer<token>' https://api.internal.com/backend/app/cis/<name>
curl -XPOST--header 'Content-Type: application/json'--header 'Authorization: Bearer<token>'-d {"state": "ON"}https://api.internal.com/backend/app/cis
JWT Skills
JWT Skills是符合Agent Skills规范的一组AI skills,包括编码(jwt-encode)、解码(jwt-decode)和验证(jwt-validate)JWT tokens。
安装
npx skills add jsonwebtoken/jwt-skills使用
/jwt-decode eyJhbGciOiJIUzI1NiIs... /jwt-encode {"sub": "1234567890", "name": "Test User"} /jwt-validate eyJhbGciOiJIUzI1NiIs...JWT
RFC 7519
JWT skills
Auth0 FGA