python 中的 JWT 加密负载? (JWE)

JWT encrypting payload in python? (JWE)

根据 RFC 7516 应该可以加密 payload/claim,称为 JWE。

是否有任何 python 库支持它?

我检查了 PyJWT、python-jose 和 jwcrypto,但它们都只有使用 HS256 (JWS) 签名的示例。

很抱歉,如果这是显而易见的,但当涉及到加密的事情时,我会格外谨慎。

Jose 和 jwcrypto 库都可以做 JWE。

对于jose

claims = {
'iss': 'http://www.example.com',
'sub': 42,
}
pubKey = {'k':\
           '-----BEGIN PUBLIC KEY-----\n\
-----END PUBLIC KEY-----'
    }
# decrypt on the other end using the private key
privKey = {'k': 
    '-----BEGIN RSA PRIVATE KEY-----\n'+\
'-----END RSA PRIVATE KEY-----'
}

encJwt = jose.encrypt(claims, pubKey)
serJwt = jose.serialize_compact(encJwt)
decJwt = jose.decrypt(jose.deserialize_compact(serJwt), privKey)

对于jwcrypto

# algorithm to use
eprot = {'alg': "RSA-OAEP", 'enc': "A128CBC-HS256"}
stringPayload = u'attack at dawn'
E = jwe.JWE(stringPayload, json_encode(eprot))
E.add_recipient(pubKey)
encrypted_token = E.serialize(compact=True)
E = jwe.JWE()
E.deserialize(encrypted_token, key=privKey)
decrypted_payload = E.payload

https://jwcrypto.readthedocs.io/en/latest/jwk.html#examples

from jwcrypto import jwk
_k = jwk.JWK.generate(kty='RSA', size=2048)
_text = _k.export()

import json
# loading the key back
_import_key_dict = json.loads(_text)
key = jwk.JWK(**json.loads(_import_key_dict))