Skip to content

Commit 4fa385f

Browse files
committed
Allow the use of the 'iss' value to pick a JWT profile to verify against.
1 parent 40c5d94 commit 4fa385f

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/cryptojwt/jwt.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)