JWT在python中加密有效负载?(JWE)

Joh*_*nny 7 python jwt jwe pyjwt python-jose

根据RFC 7516,应该可以加密有效载荷/声明,称为JWE.

有没有支持它的python库?

我已经检查了PyJWT,python-jose和jwcrypto,但他们都只是用HS256(JWS)签名的例子.

对不起,如果这是非常明显的,但是当谈到涉及加密的事情时,我会格外谨慎.

小智 8

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)
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

  • jose 库不支持 python 3。请参阅 https://github.com/Demonware/jose/pull/15 。令人困惑的是,另一个名为 python-jose 的库不支持 JWE。 (3认同)
  • @kilokahn 三年后,但因为我有同样的问题;您可以使用“key = jwcrypto.jwk.JWK.from_pem(pemfile.read())”,如下所示:https://jwcrypto.readthedocs.io/en/stable/jwk.html#examples (2认同)