33import json
44import uuid
55
6+ from cryptojwt import as_unicode
67from cryptojwt import jwe
78from cryptojwt import jws
89from cryptojwt .exception import MissingValue
10+ from cryptojwt .exception import VerificationError
911from cryptojwt .jwe import JWE
1012from cryptojwt .jws import JWS
1113from cryptojwt .jws import NoSuitableSigningKeys
@@ -62,7 +64,7 @@ def get_jwt_keys(jwt, keys, use):
6264
6365 # pick issuer keys
6466 if use == 'sig' :
65- payload = json .loads (jwt .part [1 ])
67+ payload = json .loads (as_unicode ( jwt .part [1 ]) )
6668 try :
6769 _keys = keys [payload ['iss' ]]
6870 except KeyError : # No issuer, not kosher
@@ -79,6 +81,8 @@ def get_jwt_keys(jwt, keys, use):
7981
8082
8183class JWT (object ):
84+ msg_cls = None
85+
8286 def __init__ (self , own_keys = None , iss = '' , rec_keys = None , lifetime = 0 ,
8387 sign_alg = 'RS256' , encrypt = False , enc_enc = "A128CBC-HS256" ,
8488 enc_alg = "RSA1_5" ):
@@ -193,7 +197,7 @@ def _decrypt(self, rj, token):
193197 :param token: The encrypted JsonWebToken
194198 :return:
195199 """
196- keys = get_jwt_keys (rj .jwt , self .own_keys , 'enc' )
200+ keys = get_jwt_keys (rj .jwt , self .my_keys () , 'enc' )
197201 return rj .decrypt (token , keys = keys )
198202
199203 def unpack (self , token ):
@@ -217,4 +221,10 @@ def unpack(self, token):
217221 else :
218222 raise Exception ()
219223
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