@@ -42,6 +42,7 @@ def __init__(
4242 payload : Dict [str , Any ],
4343 signature : str ,
4444 kid : Optional [str ],
45+ parsed_header : Optional [Dict [str , Any ]] = None ,
4546 ) -> None :
4647 self .version = version
4748 self .raw_token_string = raw_token_string
@@ -50,24 +51,26 @@ def __init__(
5051 self .payload = payload
5152 self .signature = signature
5253 self .kid = kid
54+ self .parsed_header = parsed_header
5355
5456
5557def parse_jwt_without_signature_verification (jwt : str ) -> ParsedJWTInfo :
5658 splitted_input = jwt .split ("." )
57- latest_access_token_version = 3
59+ TOKEN_V3 = 3
5860 if len (splitted_input ) != 3 :
5961 raise Exception ("invalid jwt" )
6062
6163 # V1 and V2 are functionally identical, plus all legacy tokens should be V2 now.
6264 # So we can assume these defaults:
6365 version = 2
6466 kid = None
67+ parsed_header = None
6568 # V2 or older tokens didn't save the key id
6669 header , payload , signature = splitted_input
6770 # checking the header
6871 if header not in _allowed_headers :
6972 parsed_header = loads (utf_base64decode (header , True ))
70- header_version = parsed_header .get ("version" , str (latest_access_token_version ))
73+ header_version = parsed_header .get ("version" , str (TOKEN_V3 ))
7174
7275 try :
7376 version = int (header_version )
@@ -79,7 +82,7 @@ def parse_jwt_without_signature_verification(jwt: str) -> ParsedJWTInfo:
7982 if (
8083 parsed_header ["typ" ] != "JWT"
8184 or not isinstance (version , int )
82- or version < latest_access_token_version
85+ or version < TOKEN_V3
8386 or kid is None
8487 ):
8588 raise Exception ("JWT header mismatch" )
@@ -94,4 +97,5 @@ def parse_jwt_without_signature_verification(jwt: str) -> ParsedJWTInfo:
9497 payload = loads (utf_base64decode (payload , True )),
9598 signature = signature ,
9699 kid = kid ,
100+ parsed_header = parsed_header ,
97101 )
0 commit comments