生成和验证json web令牌的模块
python_jwt的Python项目详细描述
Pythonjwt
用于生成和验证JSON Web Tokens的模块。
- 注意:从2.0.1版开始,命名空间已从
jwt
更改为python_jwt
,以避免与PyJWT冲突。 - 注意:版本1.0.0及更高版本修复了json web令牌验证中的a vulnerability,因此如果您使用此功能,请升级。API已更改,因此需要更新应用程序。verify_jwt现在要求您指定允许哪些签名算法。
- 用jwcrypto来做重吊。
- 支持RS256, RS384, RS512、PS256, PS384, PS512、HS256, HS384, HS512和none签名算法。
- 单元测试,包括与node-jsjws的互操作性测试。
- 支持Python3.6。注意:generate_jwt以unicode字符串的形式返回标记,即使在python 2.7上也是如此。
示例:
importpython_jwtasjwt,jwcrypto.jwkasjwk,datetimekey=jwk.JWK.generate(kty='RSA',size=2048)payload={'foo':'bar','wup':90};token=jwt.generate_jwt(payload,key,'PS256',datetime.timedelta(minutes=5))header,claims=jwt.verify_jwt(token,key,['PS256'])forkinpayload:assertclaims[k]==payload[k]
api描述为here。
安装
pip install python_jwt
另一个例子
您可以在PEM-format字符串之间读写键:
importpython_jwtasjwt,jwcrypto.jwkasjwk,datetimekey=jwk.JWK.generate(kty='RSA',size=2048)priv_pem=key.export_to_pem(private_key=True,password=None)pub_pem=key.export_to_pem()payload={'foo':'bar','wup':90};priv_key=jwk.JWK.from_pem(priv_pem)pub_key=jwk.JWK.from_pem(pub_pem)token=jwt.generate_jwt(payload,priv_key,'RS256',datetime.timedelta(minutes=5))header,claims=jwt.verify_jwt(token,pub_key,['RS256'])forkinpayload:assertclaims[k]==payload[k]
许可证
测试
make test
棉绒
make lint
代码覆盖率
make coverage
coverage.py结果可用here。
工作服页面是here。
基准
make bench
下面是在运行Ubuntu17.04的英特尔酷睿i5-4300m2.6GHz处理器和8GB内存的笔记本电脑上的一些结果。
Generate Key | user (ns) | sys (ns) | real (ns) |
---|---|---|---|
RSA | 103,100,000 | 200,000 | 103,341,537 |
Generate Token | user (ns) | sys (ns) | real (ns) |
---|---|---|---|
HS256 | 220,000 | 0 | 226,478 |
HS384 | 220,000 | 0 | 218,233 |
HS512 | 230,000 | 0 | 225,823 |
PS256 | 1,530,000 | 10,000 | 1,536,235 |
PS384 | 1,550,000 | 0 | 1,549,844 |
PS512 | 1,520,000 | 10,000 | 1,524,844 |
RS256 | 1,520,000 | 10,000 | 1,524,565 |
RS384 | 1,530,000 | 0 | 1,528,074 |
RS512 | 1,510,000 | 0 | 1,526,089 |
Load Key | user (ns) | sys (ns) | real (ns) |
---|---|---|---|
RSA | 210,000 | 3,000 | 210,791 |
Verify Token | user (ns) | sys (ns) | real (ns) |
---|---|---|---|
HS256 | 100,000 | 0 | 101,478 |
HS384 | 100,000 | 10,000 | 103,014 |
HS512 | 110,000 | 0 | 104,323 |
PS256 | 230,000 | 0 | 231,058 |
PS384 | 240,000 | 0 | 237,551 |
PS512 | 240,000 | 0 | 232,450 |
RS256 | 230,000 | 0 | 227,737 |
RS384 | 230,000 | 0 | 230,698 |
RS512 | 230,000 | 0 | 228,624 |