2016-05-18 7 views
2

Ich schaute auf Python-Jose und Jose, aber keiner scheint die Verschlüsselung eines signierten JWT zu unterstützen. Zum Beispiel unterstützt die "jose" -Bibliothek das separate Signieren und Verschlüsseln, ohne sie zu verschachteln.Welche Python JOSE-Bibliothek unterstützt verschachtelte JWT (signiert + verschlüsselt)?

Fehle ich etwas, vielleicht ist es ziemlich einfach, JWTs außerhalb der Bibliothek zu verschachteln? Wenn ja, teilen Sie uns bitte Tipps mit, damit das Ergebnis gut formatiert ist.

+0

Was meinst du mit verschachtelten JWTs? Willst du einfach die Nutzlast eines verschlüsselten JWE als signiertes JWT? –

+0

Wie diese http://connect2id.com/products/nimbus-jose-jwt/examples/signed-and-encrypted-jwt – Debriter

+0

Dort signieren sie nur ein JWT und verwenden das dann in der Nutzlast eines verschlüsselten JWE. Es ist nicht Teil der JOSE-Spezifikation, also müssten Sie das selbst tun. –

Antwort

1

jwcrypto unterstützt verschachtelte JWS und JWE.

Um sich anzumelden und dann verschlüsseln:

# 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) 

Unterschrift zu entschlüsseln und zu verifizieren:

#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 
+0

Wie erstelle ich JWK aus bestehenden String (128-Bit-String für AES 128 GCM-Verschlüsselung verwendet werden, um JWE zu bekommen)? –

Verwandte Themen