Skip to content

Commit b1c2642

Browse files
Merge branch 'master' into bump_version
2 parents 6ad883b + 52ead0b commit b1c2642

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

okta_jwt_verifier/jwt_verifier.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,12 @@ async def verify_access_token(self, token, claims_to_verify=('iss', 'aud', 'exp'
8989
if headers.get('alg') != 'RS256':
9090
raise JWTValidationException('Header claim "alg" is invalid.')
9191

92-
okta_jwk = await self.get_jwk(headers['kid'])
93-
self.verify_signature(token, okta_jwk)
94-
9592
self.verify_claims(claims,
9693
claims_to_verify=claims_to_verify,
9794
leeway=self.leeway)
95+
96+
okta_jwk = await self.get_jwk(headers['kid'])
97+
self.verify_signature(token, okta_jwk)
9898
except JWTValidationException:
9999
raise
100100
except Exception as err:
@@ -125,13 +125,13 @@ async def verify_id_token(self, token, claims_to_verify=('iss', 'exp'), nonce=No
125125
if headers.get('alg') != 'RS256':
126126
raise JWTValidationException('Header claim "alg" is invalid.')
127127

128-
okta_jwk = await self.get_jwk(headers['kid'])
129-
self.verify_signature(token, okta_jwk)
130-
131128
self.verify_claims(claims,
132129
claims_to_verify=claims_to_verify,
133130
leeway=self.leeway)
134131

132+
okta_jwk = await self.get_jwk(headers['kid'])
133+
self.verify_signature(token, okta_jwk)
134+
135135
# verify client_id and nonce
136136
self.verify_client_id(claims['aud'])
137137
if 'nonce' in claims and claims['nonce'] != nonce:

tests/unit/test_jwt_verifier.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,36 @@ def test_verify_claims_invalid():
188188
jwt_verifier.verify_claims(claims, ('iss', 'aud', 'exp'))
189189

190190

191+
@pytest.mark.asyncio
192+
async def test_invalid_claims_fail_first(mocker):
193+
"""Check if claims are invalid, exception is raised and no network call is needed."""
194+
client_id = 'test_client_id'
195+
audience = 'api://default'
196+
headers = {'alg': 'RS256', 'kid': 'test_kid'}
197+
iss_time = time.time()
198+
claims = {'ver': 1,
199+
'jti': 'test_jti_str',
200+
'iss': 'https://test_issuer.com',
201+
'aud': audience,
202+
'iat': iss_time,
203+
'exp': iss_time+300,
204+
'cid': client_id,
205+
'uid': 'test_uid',
206+
'scp': ['openid'],
207+
'sub': 'test_jwt@okta.com'}
208+
signing_input = 'test_signing_input'
209+
signature = 'test_signature'
210+
mock_parse_token = lambda token: (headers, claims, signing_input, signature)
211+
mocker.patch('okta_jwt_verifier.jwt_utils.JWTUtils.parse_token', mock_parse_token)
212+
213+
token = 'test_token'
214+
issuer = 'https://invalid_issuer.com'
215+
jwt_verifier = AccessTokenVerifier(issuer)
216+
with pytest.raises(JWTValidationException) as err:
217+
await jwt_verifier.verify(token)
218+
assert str(err.value) == 'Invalid issuer'
219+
220+
191221
def test_verify_claims_missing_claim():
192222
"""Check if method verify_claims raises an exception if required claim is missing."""
193223
client_id = 'test_client_id'

0 commit comments

Comments
 (0)