1313from jose .utils import base64url_decode
1414
1515
16- def sign (claims , key , headers = None , algorithm = ALGORITHMS .HS256 ):
16+ def sign (payload , key , headers = None , algorithm = ALGORITHMS .HS256 ):
1717 """Signs a claims set and returns a JWS string.
1818
1919 Args:
20- claims (dict ): A claims set to sign
20+ payload (str ): A string to sign
2121 key (str): The key to use for signing the claim set
2222 headers (dict, optional): A set of headers that will be added to
2323 the default headers. Any headers that are added as additional
@@ -42,8 +42,8 @@ def sign(claims, key, headers=None, algorithm=ALGORITHMS.HS256):
4242 raise JWSError ('Algorithm %s not supported.' % algorithm )
4343
4444 encoded_header = _encode_header (algorithm , additional_headers = headers )
45- encoded_claims = _encode_claims ( claims )
46- signed_output = _sign_header_and_claims (encoded_header , encoded_claims , algorithm , key )
45+ encoded_payload = _encode_payload ( payload )
46+ signed_output = _sign_header_and_claims (encoded_header , encoded_payload , algorithm , key )
4747
4848 return signed_output
4949
@@ -57,27 +57,27 @@ def verify(token, key, algorithms, verify=True):
5757 algorithms (str or list): Valid algorithms that should be used to verify the JWS.
5858
5959 Returns:
60- dict : The dict representation of the claims set , assuming the signature is valid.
60+ str : The str representation of the payload , assuming the signature is valid.
6161
6262 Raises:
6363 JWSError: If there is an exception verifying a token.
6464
6565 Examples:
6666
67- >>> payload = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhIjoiYiJ9.jiMyrsmD8AoHWeQgmxZ5yq8z0lXS67_QGs52AzC8Ru8'
68- >>> jws.verify(payload , 'secret', algorithms='HS256')
67+ >>> token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhIjoiYiJ9.jiMyrsmD8AoHWeQgmxZ5yq8z0lXS67_QGs52AzC8Ru8'
68+ >>> jws.verify(token , 'secret', algorithms='HS256')
6969
7070 """
7171
72- header , claims , signing_input , signature = _load (token )
72+ header , payload , signing_input , signature = _load (token )
7373
7474 if verify :
75- _verify_signature (claims , signing_input , header , signature , key , algorithms )
75+ _verify_signature (payload , signing_input , header , signature , key , algorithms )
7676
77- return claims
77+ return payload
7878
7979
80- def get_unverified_headers (token ):
80+ def get_unverified_header (token ):
8181 """Returns the decoded headers without verification of any kind.
8282
8383 Args:
@@ -93,6 +93,24 @@ def get_unverified_headers(token):
9393 return header
9494
9595
96+ def get_unverified_headers (token ):
97+ """Returns the decoded headers without verification of any kind.
98+
99+ This is simply a wrapper of get_unverified_header() for backwards
100+ compatibility.
101+
102+ Args:
103+ token (str): A signed JWS to decode the headers from.
104+
105+ Returns:
106+ dict: The dict representation of the token headers.
107+
108+ Raises:
109+ JWSError: If there is an exception decoding the token.
110+ """
111+ return get_unverified_header (token )
112+
113+
96114def get_unverified_claims (token ):
97115 """Returns the decoded claims without verification of any kind.
98116
@@ -126,13 +144,17 @@ def _encode_header(algorithm, additional_headers=None):
126144 return base64url_encode (json_header )
127145
128146
129- def _encode_claims (claims ):
130- json_payload = json .dumps (
131- claims ,
132- separators = (',' , ':' ),
133- ).encode ('utf-8' )
147+ def _encode_payload (payload ):
148+ if isinstance (payload , Mapping ):
149+ try :
150+ payload = json .dumps (
151+ payload ,
152+ separators = (',' , ':' ),
153+ ).encode ('utf-8' )
154+ except ValueError :
155+ pass
134156
135- return base64url_encode (json_payload )
157+ return base64url_encode (payload )
136158
137159
138160def _sign_header_and_claims (encoded_header , encoded_claims , algorithm , key ):
@@ -172,22 +194,16 @@ def _load(jwt):
172194 raise JWSError ('Invalid header string: must be a json object' )
173195
174196 try :
175- claims_data = base64url_decode (claims_segment )
176- claims = json .loads (claims_data .decode ('utf-8' ))
197+ payload = base64url_decode (claims_segment )
177198 except (TypeError , binascii .Error ):
178199 raise JWSError ('Invalid payload padding' )
179- except ValueError as e :
180- raise JWSError ('Invalid payload string: %s' % e )
181-
182- if not isinstance (claims , Mapping ):
183- raise JWSError ('Invalid payload string: must be a json object' )
184200
185201 try :
186202 signature = base64url_decode (crypto_segment )
187203 except (TypeError , binascii .Error ):
188204 raise JWSError ('Invalid crypto padding' )
189205
190- return (header , claims , signing_input , signature )
206+ return (header , payload , signing_input , signature )
191207
192208
193209def _verify_signature (payload , signing_input , header , signature , key = '' , algorithms = None ):
0 commit comments