@@ -86,7 +86,7 @@ class JWT(object):
86
86
def __init__ (self , own_keys = None , iss = '' , rec_keys = None , lifetime = 0 ,
87
87
sign = True , sign_alg = 'RS256' , encrypt = False ,
88
88
enc_enc = "A128CBC-HS256" , enc_alg = "RSA1_5" , msg_cls = None ,
89
- iss2msg_cls = None ):
89
+ iss2msg_cls = None , skew = 15 ):
90
90
self .own_keys = own_keys
91
91
self .rec_keys = rec_keys or {}
92
92
self .iss = iss
@@ -99,6 +99,7 @@ def __init__(self, own_keys=None, iss='', rec_keys=None, lifetime=0,
99
99
self .msg_cls = msg_cls
100
100
self .with_jti = False
101
101
self .iss2msg_cls = iss2msg_cls or {}
102
+ self .skew = skew
102
103
103
104
def receiver_keys (self , recv ):
104
105
return self .rec_keys [recv ]
@@ -210,9 +211,9 @@ def _decrypt(self, rj, token):
210
211
keys = get_jwt_keys (rj .jwt , self .my_keys (), 'enc' )
211
212
return rj .decrypt (token , keys = keys )
212
213
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 ):
216
217
raise VerificationError ()
217
218
return _msg
218
219
@@ -228,12 +229,14 @@ def unpack(self, token):
228
229
raise KeyError
229
230
230
231
_content_type = 'jwt'
232
+ _jwe_header = _jws_header = None
231
233
232
234
# Check if it's an encrypted JWT
233
235
_rj = jwe .factory (token )
234
236
if _rj :
235
237
# Yes, try to decode
236
238
_info = self ._decrypt (_rj , token )
239
+ _jwe_header = _rj .jwt .headers
237
240
# Try to find out if the information encrypted was a signed JWT
238
241
try :
239
242
_content_type = _rj .jwt .headers ['cty' ]
@@ -250,6 +253,7 @@ def unpack(self, token):
250
253
_info = self ._verify (_rj , _info )
251
254
else :
252
255
raise Exception ()
256
+ _jws_header = _rj .jwt .headers
253
257
else :
254
258
# So, not a signed JWT
255
259
try :
@@ -269,6 +273,12 @@ def unpack(self, token):
269
273
_msg_cls = None
270
274
271
275
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
273
283
else :
274
284
return _info
0 commit comments