3
3
import json
4
4
import uuid
5
5
6
+ from cryptojwt import as_unicode
6
7
from cryptojwt import jwe
7
8
from cryptojwt import jws
8
9
from cryptojwt .exception import MissingValue
10
+ from cryptojwt .exception import VerificationError
9
11
from cryptojwt .jwe import JWE
10
12
from cryptojwt .jws import JWS
11
13
from cryptojwt .jws import NoSuitableSigningKeys
@@ -62,7 +64,7 @@ def get_jwt_keys(jwt, keys, use):
62
64
63
65
# pick issuer keys
64
66
if use == 'sig' :
65
- payload = json .loads (jwt .part [1 ])
67
+ payload = json .loads (as_unicode ( jwt .part [1 ]) )
66
68
try :
67
69
_keys = keys [payload ['iss' ]]
68
70
except KeyError : # No issuer, not kosher
@@ -79,6 +81,8 @@ def get_jwt_keys(jwt, keys, use):
79
81
80
82
81
83
class JWT (object ):
84
+ msg_cls = None
85
+
82
86
def __init__ (self , own_keys = None , iss = '' , rec_keys = None , lifetime = 0 ,
83
87
sign_alg = 'RS256' , encrypt = False , enc_enc = "A128CBC-HS256" ,
84
88
enc_alg = "RSA1_5" ):
@@ -193,7 +197,7 @@ def _decrypt(self, rj, token):
193
197
:param token: The encrypted JsonWebToken
194
198
:return:
195
199
"""
196
- keys = get_jwt_keys (rj .jwt , self .own_keys , 'enc' )
200
+ keys = get_jwt_keys (rj .jwt , self .my_keys () , 'enc' )
197
201
return rj .decrypt (token , keys = keys )
198
202
199
203
def unpack (self , token ):
@@ -217,4 +221,10 @@ def unpack(self, token):
217
221
else :
218
222
raise Exception ()
219
223
220
- return info
224
+ if self .msg_cls :
225
+ _msg = self .msg_cls (** info )
226
+ if not _msg .verify ():
227
+ raise VerificationError ()
228
+ return _msg
229
+ else :
230
+ return info
0 commit comments