|
6 | 6 | from jwt.algorithms import Algorithm |
7 | 7 | from jwt.api_jws import PyJWS |
8 | 8 | from jwt.exceptions import ( |
9 | | - DecodeError, InvalidAlgorithmError |
| 9 | + DecodeError, InvalidAlgorithmError, InvalidTokenError |
10 | 10 | ) |
11 | 11 | from jwt.utils import base64url_decode |
12 | 12 |
|
@@ -367,12 +367,24 @@ def test_decode_with_algo_none_and_verify_false_should_pass(self, jws, payload): |
367 | 367 |
|
368 | 368 | def test_get_unverified_header_returns_header_values(self, jws, payload): |
369 | 369 | jws_message = jws.encode(payload, key='secret', algorithm='HS256', |
370 | | - headers={'kid': 123}) |
| 370 | + headers={'kid': 'toomanysecrets'}) |
371 | 371 |
|
372 | 372 | header = jws.get_unverified_header(jws_message) |
373 | 373 |
|
374 | 374 | assert 'kid' in header |
375 | | - assert header['kid'] == 123 |
| 375 | + assert header['kid'] == 'toomanysecrets' |
| 376 | + |
| 377 | + def test_get_unverified_header_fails_on_bad_header_types(self, jws, payload): |
| 378 | + # Contains a bad kid value (int 123 instead of string) |
| 379 | + example_jws = ( |
| 380 | + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6MTIzfQ' |
| 381 | + '.eyJzdWIiOiIxMjM0NTY3ODkwIn0' |
| 382 | + '.vs2WY54jfpKP3JGC73Vq5YlMsqM5oTZ1ZydT77SiZSk') |
| 383 | + |
| 384 | + with pytest.raises(InvalidTokenError) as exc: |
| 385 | + jws.get_unverified_header(example_jws) |
| 386 | + |
| 387 | + assert 'Key ID header parameter must be a string' == str(exc.value) |
376 | 388 |
|
377 | 389 | @pytest.mark.skipif(not has_crypto, reason='Not supported without cryptography library') |
378 | 390 | def test_encode_decode_with_rsa_sha256(self, jws, payload): |
@@ -597,3 +609,14 @@ def test_encode_headers_parameter_adds_headers(self, jws, payload): |
597 | 609 |
|
598 | 610 | assert 'testheader' in header_obj |
599 | 611 | assert header_obj['testheader'] == headers['testheader'] |
| 612 | + |
| 613 | + def test_encode_fails_on_invalid_kid_types(self, jws, payload): |
| 614 | + with pytest.raises(InvalidTokenError) as exc: |
| 615 | + jws.encode(payload, 'secret', headers={'kid': 123}) |
| 616 | + |
| 617 | + assert 'Key ID header parameter must be a string' == str(exc.value) |
| 618 | + |
| 619 | + with pytest.raises(InvalidTokenError) as exc: |
| 620 | + jws.encode(payload, 'secret', headers={'kid': None}) |
| 621 | + |
| 622 | + assert 'Key ID header parameter must be a string' == str(exc.value) |
0 commit comments