python-joseとjoseを見ましたが、どちらも署名付きJWTの暗号化をサポートしていないようです。たとえば、 "jose"ライブラリは、ネストすることなく、署名と暗号化を別々にサポートしています。どのPython JOSEライブラリがネストされたJWT(signed + encrypted)をサポートしていますか?
ライブラリーの外にJWTを入れ子にするのは簡単でしょうか?その場合は、これを達成するためのヒントを共有して、結果のフォーマットが整えられるようにしてください。
python-joseとjoseを見ましたが、どちらも署名付きJWTの暗号化をサポートしていないようです。たとえば、 "jose"ライブラリは、ネストすることなく、署名と暗号化を別々にサポートしています。どのPython JOSEライブラリがネストされたJWT(signed + encrypted)をサポートしていますか?
ライブラリーの外にJWTを入れ子にするのは簡単でしょうか?その場合は、これを達成するためのヒントを共有して、結果のフォーマットが整えられるようにしてください。
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
既存の文字列(JWEを取得するためにAES 128 GCM暗号化に使用される128ビット文字列)からJWKを作成する方法は? –
あなたは、ネストされたJWTsとはどういう意味ですか?暗号化されたJWEのペイロードを署名されたJWTにするだけですか? –
このようにhttp://connect2id.com/products/nimbus-jose-jwt/examples/signed-and-encrypted-jwt – Debriter
彼らはJWTに署名し、それを暗号化されたJWEのペイロードで使用しています。それはJOSE仕様の一部ではないので、あなたはそれを自分で行う必要があります。 –