Skip to content

Commit acb2635

Browse files
committed
Added get_unverified_header method so that unverified headers can be retrieved by the application. Closes jpadilla#155
1 parent 6c9cada commit acb2635

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

jwt/api_jws.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,14 @@ def decode(self, jws, key='', verify=True, algorithms=None, options=None,
119119

120120
return payload
121121

122+
def get_unverified_header(self, jwt):
123+
"""Returns back the JWT header parameters as a dict()
124+
125+
Note: The signature is not verified so the header parameters
126+
should not be fully trusted until signature verification is complete
127+
"""
128+
return self._load(jwt)[2]
129+
122130
def _load(self, jwt):
123131
if isinstance(jwt, text_type):
124132
jwt = jwt.encode('utf-8')

tests/test_api_jws.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,15 @@ def test_decode_with_algo_none_and_verify_false_should_pass(self, jws, payload):
356356
jws_message = jws.encode(payload, key=None, algorithm=None)
357357
jws.decode(jws_message, verify=False)
358358

359+
def test_get_unverified_header_returns_header_values(self, jws, payload):
360+
jws_message = jws.encode(payload, key='secret', algorithm='HS256',
361+
headers={'kid': 123})
362+
363+
header = jws.get_unverified_header(jws_message)
364+
365+
assert 'kid' in header
366+
assert header['kid'] == 123
367+
359368
@pytest.mark.skipif(not has_crypto, reason='Not supported without cryptography library')
360369
def test_encode_decode_with_rsa_sha256(self, jws, payload):
361370
# PEM-formatted RSA key

0 commit comments

Comments
 (0)