@@ -84,7 +84,7 @@ class JWT(object):
8484
8585 def __init__ (self , own_keys = None , iss = '' , rec_keys = None , lifetime = 0 ,
8686 sign_alg = 'RS256' , encrypt = False , enc_enc = "A128CBC-HS256" ,
87- enc_alg = "RSA1_5" , msg_cls = None ):
87+ enc_alg = "RSA1_5" , msg_cls = None , iss2msg_cls = None ):
8888 self .own_keys = own_keys
8989 self .rec_keys = rec_keys or {}
9090 self .iss = iss
@@ -95,6 +95,7 @@ def __init__(self, own_keys=None, iss='', rec_keys=None, lifetime=0,
9595 self .enc_enc = enc_enc
9696 self .msg_cls = msg_cls
9797 self .with_jti = False
98+ self .iss2msg_cls = iss2msg_cls or {}
9899
99100 def receiver_keys (self , recv ):
100101 return self .rec_keys [recv ]
@@ -200,6 +201,12 @@ def _decrypt(self, rj, token):
200201 keys = get_jwt_keys (rj .jwt , self .my_keys (), 'enc' )
201202 return rj .decrypt (token , keys = keys )
202203
204+ def verify_profile (self , msg_cls , ** info ):
205+ _msg = self .msg_cls (** info )
206+ if not _msg .verify ():
207+ raise VerificationError ()
208+ return _msg
209+
203210 def unpack (self , token ):
204211 """
205212 Unpack a received signed or signed and encrypted Json Web Token
@@ -222,9 +229,11 @@ def unpack(self, token):
222229 raise Exception ()
223230
224231 if self .msg_cls :
225- _msg = self .msg_cls (** info )
226- if not _msg .verify ():
227- raise VerificationError ()
228- return _msg
232+ self .verify_profile (self .msg_cls , ** info )
229233 else :
230- return info
234+ try :
235+ _msg_cls = self .iss2msg_cls [info ['iss' ]]
236+ except KeyError :
237+ return info
238+ else :
239+ self .verify_profile (_msg_cls , ** info )
0 commit comments