python jwt-用于生成和验证JSON Web令牌的python模块

  JSON Web令牌(JWT)是一种紧凑的,URL安全的方法,用于表示要在两方之间转移的声明。JWT中的声明被编码为JSON对象,用作JSON Web签名(JWS)结构的有效负载或JSON Web加密(JWE)结构的纯文本,从而使声明可以进行数字签名或完整性保护带有消息验证码(MAC)和/或加密的消息。

该备忘录的状态

这是一个Internet标准跟踪文档。

本文档是Internet工程任务组(IETF)的产品。它代表了IETF社区的共识。它已经接受了公众审查,并已被Internet工程指导小组(IESG)批准发布。有关Internet标准的更多信息,请参见RFC 5741的第2节。

有关JWT的更加详细的说明,可以查看这个文档:self-issued.info/docs/draft-ietf-oauth-json-web-token.html

示例

import python_jwt as jwt, jwcrypto.jwk as jwk, datetime
key = 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'])
for k in payload: assert claims[k] == payload[k]

 

您可以在PEM格式的字符串之间读写密钥:

import python_jwt as jwt, jwcrypto.jwk as jwk, datetime
key = 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'])
for k in payload: assert claims[k] == payload[k]

 

使用模块

在这里可以下载python-jwt源文件模块,放入到项目中引入即可。

注意:从2.0.1版本开始,命名空间已从更改jwt为python_jwt,以避免与PyJWT冲突。

注意: 1.0.0版和更高版本修复了JSON Web令牌验证中的漏洞,因此,如果您正在使用此功能,请进行升级。API已更改,因此您将需要更新您的应用程序。verify_jwt现在要求您指定允许的签名算法。

支持RS256,RS384,RS512,PS256,PS384,PS512,HS256,HS384,HS512,ES256,ES384,ES512,ES256K,EdDSA和无签名算法。

单元测试,包括与jose的互操作性测试。

支持Python 2,7和3.6+。注意: 即使在Python 2.7上,generate_jwt也会以Unicode字符串的形式返回令牌。

 

posted @ 2020-12-16 18:09  expressTHK  阅读(474)  评论(0)    收藏  举报
友情链接: 百度搜索  |  网盘搜索  |  图片搜索  |  中国搜索  |  文档搜索  |  视频搜索  |  优惠券搜索  |  数字图书馆  |  公开课搜索