@@ -84,7 +84,7 @@ class JWT(object):
84
84
85
85
def __init__ (self , own_keys = None , iss = '' , rec_keys = None , lifetime = 0 ,
86
86
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 ):
88
88
self .own_keys = own_keys
89
89
self .rec_keys = rec_keys or {}
90
90
self .iss = iss
@@ -95,6 +95,7 @@ def __init__(self, own_keys=None, iss='', rec_keys=None, lifetime=0,
95
95
self .enc_enc = enc_enc
96
96
self .msg_cls = msg_cls
97
97
self .with_jti = False
98
+ self .iss2msg_cls = iss2msg_cls or {}
98
99
99
100
def receiver_keys (self , recv ):
100
101
return self .rec_keys [recv ]
@@ -200,6 +201,12 @@ def _decrypt(self, rj, token):
200
201
keys = get_jwt_keys (rj .jwt , self .my_keys (), 'enc' )
201
202
return rj .decrypt (token , keys = keys )
202
203
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
+
203
210
def unpack (self , token ):
204
211
"""
205
212
Unpack a received signed or signed and encrypted Json Web Token
@@ -222,9 +229,11 @@ def unpack(self, token):
222
229
raise Exception ()
223
230
224
231
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 )
229
233
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