|
21 | 21 |
|
22 | 22 | JWK_URL = 'https://randomstring.auth0.com/.well-known/jwks.json'
|
23 | 23 |
|
| 24 | +LEEWAY = 100 |
24 | 25 |
|
25 | 26 | class TestTokenBackend(TestCase):
|
26 | 27 | def setUp(self):
|
27 | 28 | self.hmac_token_backend = TokenBackend('HS256', SECRET)
|
| 29 | + self.hmac_leeway_token_backend = TokenBackend('HS256', SECRET, leeway=LEEWAY) |
28 | 30 | self.rsa_token_backend = TokenBackend('RS256', PRIVATE_KEY, PUBLIC_KEY)
|
29 | 31 | self.aud_iss_token_backend = TokenBackend('RS256', PRIVATE_KEY, PUBLIC_KEY, AUDIENCE, ISSUER)
|
30 | 32 | self.payload = {'foo': 'bar'}
|
@@ -283,3 +285,21 @@ def test_decode_when_token_algorithm_does_not_match(self):
|
283 | 285 |
|
284 | 286 | with self.assertRaisesRegex(TokenBackendError, 'Invalid algorithm specified'):
|
285 | 287 | self.hmac_token_backend.decode(token)
|
| 288 | + |
| 289 | + def test_decode_leeway_hmac_fail(self): |
| 290 | + self.payload["exp"] = datetime_to_epoch(aware_utcnow() - timedelta(seconds=LEEWAY * 2)) |
| 291 | + |
| 292 | + expired_token = jwt.encode(self.payload, SECRET, algorithm='HS256') |
| 293 | + |
| 294 | + with self.assertRaises(TokenBackendError): |
| 295 | + self.hmac_leeway_token_backend.decode(expired_token) |
| 296 | + |
| 297 | + def test_decode_leeway_hmac_success(self): |
| 298 | + self.payload["exp"] = datetime_to_epoch(aware_utcnow() - timedelta(seconds=LEEWAY / 2)) |
| 299 | + |
| 300 | + expired_token = jwt.encode(self.payload, SECRET, algorithm='HS256') |
| 301 | + |
| 302 | + self.assertEqual( |
| 303 | + self.hmac_leeway_token_backend.decode(expired_token), |
| 304 | + self.payload, |
| 305 | + ) |
0 commit comments