@@ -86,7 +86,7 @@ class JWT(object):
8686 def __init__ (self , own_keys = None , iss = '' , rec_keys = None , lifetime = 0 ,
8787 sign = True , sign_alg = 'RS256' , encrypt = False ,
8888 enc_enc = "A128CBC-HS256" , enc_alg = "RSA1_5" , msg_cls = None ,
89- iss2msg_cls = None ):
89+ iss2msg_cls = None , skew = 15 ):
9090 self .own_keys = own_keys
9191 self .rec_keys = rec_keys or {}
9292 self .iss = iss
@@ -99,6 +99,7 @@ def __init__(self, own_keys=None, iss='', rec_keys=None, lifetime=0,
9999 self .msg_cls = msg_cls
100100 self .with_jti = False
101101 self .iss2msg_cls = iss2msg_cls or {}
102+ self .skew = skew
102103
103104 def receiver_keys (self , recv ):
104105 return self .rec_keys [recv ]
@@ -210,9 +211,9 @@ def _decrypt(self, rj, token):
210211 keys = get_jwt_keys (rj .jwt , self .my_keys (), 'enc' )
211212 return rj .decrypt (token , keys = keys )
212213
213- def verify_profile (self , msg_cls , ** info ):
214- _msg = self . msg_cls (** info )
215- if not _msg .verify ():
214+ def verify_profile (self , msg_cls , info , ** kwargs ):
215+ _msg = msg_cls (** info )
216+ if not _msg .verify (** kwargs ):
216217 raise VerificationError ()
217218 return _msg
218219
@@ -228,12 +229,14 @@ def unpack(self, token):
228229 raise KeyError
229230
230231 _content_type = 'jwt'
232+ _jwe_header = _jws_header = None
231233
232234 # Check if it's an encrypted JWT
233235 _rj = jwe .factory (token )
234236 if _rj :
235237 # Yes, try to decode
236238 _info = self ._decrypt (_rj , token )
239+ _jwe_header = _rj .jwt .headers
237240 # Try to find out if the information encrypted was a signed JWT
238241 try :
239242 _content_type = _rj .jwt .headers ['cty' ]
@@ -250,6 +253,7 @@ def unpack(self, token):
250253 _info = self ._verify (_rj , _info )
251254 else :
252255 raise Exception ()
256+ _jws_header = _rj .jwt .headers
253257 else :
254258 # So, not a signed JWT
255259 try :
@@ -269,6 +273,12 @@ def unpack(self, token):
269273 _msg_cls = None
270274
271275 if _msg_cls :
272- return self .verify_profile (_msg_cls , ** _info )
276+ vp_args = {'skew' : self .skew }
277+ if self .iss :
278+ vp_args ['aud' ] = self .iss
279+ _info = self .verify_profile (_msg_cls , _info , ** vp_args )
280+ _info .jwe_header = _jwe_header
281+ _info .jws_header = _jws_header
282+ return _info
273283 else :
274284 return _info
0 commit comments