jwt
Json Web Token简称jwt,其实感觉和flask session很像https://kit4y.github.io/2019/11/19/flask-zhong-session-de-na-xie-shi/
JWT一般的为三部分:header,payload,Signature
而flask-session的三部分为json->zlib->base64后的源字符串 . 时间戳 . hmac签名信息
jwt组成
Header
通常由两部分组成:令牌的类型,即JWT和正在使用的散列算法,如HMAC SHA256或RSA。
1 | { |
alg为算法的缩写,typ为类型的缩写
然后,这个JSON被Base64编码,形成JSON Web Token的第一部分。
Payload
令牌的第二部分是包含声明的有效负载。声明是关于实体(通常是用户)和其他元数据的声明。
这里是用户随意定义的数据
例如上面的举例
1 | { |
然后将有效载荷Base64进行编码以形成JSON Web Token的第二部分。
但是需要注意对于已签名的令牌,此信息尽管受到篡改保护,但任何人都可以阅读。除非加密,否则不要将秘密信息放在JWT的有效内容或标题元素中。
Signature
要创建签名部分,必须采用header,payload,密钥
然后利用header中指定算法进行签名
例如HS256(HMAC SHA256),签名的构成为
1 | HMACSHA256( |
然后将这部分base64编码形成JSON Web Token第三部分
这里采用的是私钥签名,公钥验证的方法。
在线工具
https://jwt.io/
http://jwt.calebb.net/
jwt密钥爆破工具
https://github.com/brendan-rius/c-jwt-cracker
使用方法
1 | git clone https://github.com/brendan-rius/c-jwt-cracker |
python3对jwt操作
1 | # -*- coding: utf-8 -*- |