JSON Web Tokens
项目描述
jot 是 [JSON Web Token (JWT)](http://tools.ietf.org/html/draft-jones-json-web-token-07) 规范的 Python 实现(草案)。
它支持通过 [JWS](http://tools.ietf.org/html/draft-jones-json-web-signature-04) 规范进行签名。目前仅支持 HMAC SHA-256/384/512。
它最终将通过 JWE 支持加密,遵循类似的 API。
明文 JWT
明文 JWT 未经签名或加密,仅接受一个与 JSON 兼容的对象作为参数。
>>> from jot import jwt >>> msg = jwt.encode({'status': 'ready'}) >>> msg 'eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdGF0dXMiOiJyZWFkeSJ9.' >>> jwt.decode(msg) {'headers': {u'alg': u'none', u'typ': u'JWT'}, 'valid': True, 'payload': {u'status': u'ready'}}
签名 JWT(JWS)
编码时,您需要提供表示您期望算法的对象、一个密钥以及可选的用于头部的密钥 ID。
>>> from jot import jwt, jws >>> msg = jwt.encode({'status': 'ready'}, signer=jws.HmacSha( bits=256, key='verysecret', key_id='client1')) >>> msg 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImNsaWVudDEifQ.eyJzdGF0dXM iOiJyZWFkeSJ9.DcKKQXXUjGP7pape8BgQ3AcQSPH8toWFLY2woIVUZ-w'
解码和验证时,您必须为每个可能的预期算法传递一个签名者对象。这可能只有一个。如果您期望只有一个特定的密钥,可以直接将其传递给签名者对象。
>>> jwt.decode(msg, signers=[jws.HmacSha(bits=256, key='verysecret')]) {'headers': {u'alg': u'HS256', u'typ': u'JWT', u'kid': u'client1'}, 'valid': True, 'payload': {u'status': u'ready'}}
如果您期望多个密钥,可以传递一个键 ID 到密钥映射的字典。decode() 将使用 'kid'(键 ID)头部来选择正确的一个。
>>> jwt.decode(msg, signers=[jws.HmacSha(bits=256, keydict={'client1': 'verysecret', 'client2': 'evensecreter'})]) {'headers': {u'alg': u'HS256', u'typ': u'JWT', u'kid': u'client1'}, 'valid': True, 'payload': {u'status': u'ready'}}
无效的密钥或在密钥字典中找不到的键 ID 将将 'valid' 属性翻转到 False
>>> jwt.decode(msg, signers=[jws.HmacSha(bits=256, keydict={'client1': 'notverysecret', 'client2': 'evensecreter'})]) {'headers': {u'alg': u'HS256', u'typ': u'JWT', u'kid': u'client1'}, 'valid': False, 'payload': {u'status': u'ready'}} >>> jwt.decode(msg, signers=[jws.HmacSha(bits=256, keydict={'client10': 'verysecret', 'client2': 'evensecreter'})]) {'headers': {u'alg': u'HS256', u'typ': u'JWT', u'kid': u'client1'}, 'valid': False, 'payload': {u'status': u'ready'}}
如果 'valid' 为 False,则不应信任头部和有效载荷,但它们提供了一些信息。
项目详情
关闭
jot-0.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6a433c5d9337c47967df441db4b54d3cec6f1a0456887d2258572fcf86e7136c |
|
MD5 | 2b471d61915d01388f2a055081edec20 |
|
BLAKE2b-256 | a6f3e514043df7898ce60dcf3b35c2a4bbf7b53b40673cf3910701a950e3ff86 |