Какая библиотека Python JOSE поддерживает вложенный JWT (подписанный + зашифрованный)?

Я посмотрел на python-jose и jose, но ни один из них не поддерживает шифрование подписанного JWT. Например, библиотека "jose" поддерживает подписывание и шифрование отдельно, без их вложения.

Я что-то упускаю, может быть, довольно легко вкладывать JWT вне библиотеки? Если это так, пожалуйста, поделитесь советами по достижению этого, чтобы результат был хорошо отформатирован.

1 ответ

jwcrypto поддерживает вложенные JWS и JWE.

Чтобы подписать и затем зашифровать:

# Load your RSA pub and private keys
pubKey = jwk.JWK().from_pyca(serializedPublicKey)
privateKey = jwk.JWK().from_pyca(serializedPrivateKey)

# your JWT claims go here
claims = {
    # JWT claims in JSON format
          }
# sign the JWT
# specify algorithm needed for JWS
header = {
          u'alg' : 'RS256', 
          'customSigHeader':'customHeaderContent'
          }
# generate JWT
T = jwt.JWT(header, claims)
# sign the JWT with a private key
T.make_signed_token(privateKey)
# serialize it
signed_token = T.serialize(compact=True)

# JWE algorithm in the header
eprot = {
    'alg': "RSA-OAEP", 
    'enc': "A128CBC-HS256",
     'customEncHeader':'customHeaderContent'
     }   
E = jwe.JWE(signed_token, json_encode(eprot))
# encrypt with a public key
E.add_recipient(pubKey)#
# serialize it
encrypted_signed_token = E.serialize(compact=True)

Чтобы расшифровать и проверить подпись:

#Decrypt and Verify signature
E = jwe.JWE()
# deserialize and decrypt
E.deserialize(encrypted_signed_token, key=privateKey)
raw_payload = E.payload
# verify signature
S = jws.JWS()
S.deserialize(raw_payload, key=pubKey)
final_payload = S.payload
Другие вопросы по тегам