3
3
4
4
import jwt
5
5
from django .test import TestCase
6
- from jwt import PyJWT , algorithms
6
+ from jwt import PyJWS , algorithms
7
7
8
8
from rest_framework_simplejwt .backends import TokenBackend
9
9
from rest_framework_simplejwt .exceptions import TokenBackendError
10
- from rest_framework_simplejwt .utils import aware_utcnow , make_utc
10
+ from rest_framework_simplejwt .utils import (
11
+ aware_utcnow , datetime_to_epoch , make_utc ,
12
+ )
11
13
12
14
SECRET = 'not_secret'
13
15
@@ -163,9 +165,9 @@ def test_decode_hmac_with_expiry(self):
163
165
164
166
def test_decode_hmac_with_invalid_sig (self ):
165
167
self .payload ['exp' ] = aware_utcnow () + timedelta (days = 1 )
166
- token_1 = jwt .encode (self .payload , SECRET , algorithm = 'HS256' ). decode ( 'utf-8' )
168
+ token_1 = jwt .encode (self .payload , SECRET , algorithm = 'HS256' )
167
169
self .payload ['foo' ] = 'baz'
168
- token_2 = jwt .encode (self .payload , SECRET , algorithm = 'HS256' ). decode ( 'utf-8' )
170
+ token_2 = jwt .encode (self .payload , SECRET , algorithm = 'HS256' )
169
171
170
172
token_2_payload = token_2 .rsplit ('.' , 1 )[0 ]
171
173
token_1_sig = token_1 .rsplit ('.' , 1 )[- 1 ]
@@ -176,9 +178,11 @@ def test_decode_hmac_with_invalid_sig(self):
176
178
177
179
def test_decode_hmac_with_invalid_sig_no_verify (self ):
178
180
self .payload ['exp' ] = aware_utcnow () + timedelta (days = 1 )
179
- token_1 = jwt .encode (self .payload , SECRET , algorithm = 'HS256' ). decode ( 'utf-8' )
181
+ token_1 = jwt .encode (self .payload , SECRET , algorithm = 'HS256' )
180
182
self .payload ['foo' ] = 'baz'
181
- token_2 = jwt .encode (self .payload , SECRET , algorithm = 'HS256' ).decode ('utf-8' )
183
+ token_2 = jwt .encode (self .payload , SECRET , algorithm = 'HS256' )
184
+ # Payload copied
185
+ self .payload ["exp" ] = datetime_to_epoch (self .payload ["exp" ])
182
186
183
187
token_2_payload = token_2 .rsplit ('.' , 1 )[0 ]
184
188
token_1_sig = token_1 .rsplit ('.' , 1 )[- 1 ]
@@ -193,7 +197,9 @@ def test_decode_hmac_success(self):
193
197
self .payload ['exp' ] = aware_utcnow () + timedelta (days = 1 )
194
198
self .payload ['foo' ] = 'baz'
195
199
196
- token = jwt .encode (self .payload , SECRET , algorithm = 'HS256' ).decode ('utf-8' )
200
+ token = jwt .encode (self .payload , SECRET , algorithm = 'HS256' )
201
+ # Payload copied
202
+ self .payload ["exp" ] = datetime_to_epoch (self .payload ["exp" ])
197
203
198
204
self .assertEqual (self .hmac_token_backend .decode (token ), self .payload )
199
205
@@ -220,9 +226,9 @@ def test_decode_rsa_with_expiry(self):
220
226
221
227
def test_decode_rsa_with_invalid_sig (self ):
222
228
self .payload ['exp' ] = aware_utcnow () + timedelta (days = 1 )
223
- token_1 = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' ). decode ( 'utf-8' )
229
+ token_1 = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' )
224
230
self .payload ['foo' ] = 'baz'
225
- token_2 = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' ). decode ( 'utf-8' )
231
+ token_2 = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' )
226
232
227
233
token_2_payload = token_2 .rsplit ('.' , 1 )[0 ]
228
234
token_1_sig = token_1 .rsplit ('.' , 1 )[- 1 ]
@@ -233,13 +239,15 @@ def test_decode_rsa_with_invalid_sig(self):
233
239
234
240
def test_decode_rsa_with_invalid_sig_no_verify (self ):
235
241
self .payload ['exp' ] = aware_utcnow () + timedelta (days = 1 )
236
- token_1 = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' ). decode ( 'utf-8' )
242
+ token_1 = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' )
237
243
self .payload ['foo' ] = 'baz'
238
- token_2 = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' ). decode ( 'utf-8' )
244
+ token_2 = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' )
239
245
240
246
token_2_payload = token_2 .rsplit ('.' , 1 )[0 ]
241
247
token_1_sig = token_1 .rsplit ('.' , 1 )[- 1 ]
242
248
invalid_token = token_2_payload + '.' + token_1_sig
249
+ # Payload copied
250
+ self .payload ["exp" ] = datetime_to_epoch (self .payload ["exp" ])
243
251
244
252
self .assertEqual (
245
253
self .hmac_token_backend .decode (invalid_token , verify = False ),
@@ -250,7 +258,9 @@ def test_decode_rsa_success(self):
250
258
self .payload ['exp' ] = aware_utcnow () + timedelta (days = 1 )
251
259
self .payload ['foo' ] = 'baz'
252
260
253
- token = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' ).decode ('utf-8' )
261
+ token = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' )
262
+ # Payload copied
263
+ self .payload ["exp" ] = datetime_to_epoch (self .payload ["exp" ])
254
264
255
265
self .assertEqual (self .rsa_token_backend .decode (token ), self .payload )
256
266
@@ -260,21 +270,23 @@ def test_decode_aud_iss_success(self):
260
270
self .payload ['aud' ] = AUDIENCE
261
271
self .payload ['iss' ] = ISSUER
262
272
263
- token = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' ).decode ('utf-8' )
273
+ token = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' )
274
+ # Payload copied
275
+ self .payload ["exp" ] = datetime_to_epoch (self .payload ["exp" ])
264
276
265
277
self .assertEqual (self .aud_iss_token_backend .decode (token ), self .payload )
266
278
267
279
def test_decode_when_algorithm_not_available (self ):
268
- token = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' ). decode ( 'utf-8' )
280
+ token = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' )
269
281
270
- pyjwt_without_rsa = PyJWT ()
282
+ pyjwt_without_rsa = PyJWS ()
271
283
pyjwt_without_rsa .unregister_algorithm ('RS256' )
272
284
with patch .object (jwt , 'decode' , new = pyjwt_without_rsa .decode ):
273
285
with self .assertRaisesRegex (TokenBackendError , 'Invalid algorithm specified' ):
274
286
self .rsa_token_backend .decode (token )
275
287
276
288
def test_decode_when_token_algorithm_does_not_match (self ):
277
- token = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' ). decode ( 'utf-8' )
289
+ token = jwt .encode (self .payload , PRIVATE_KEY , algorithm = 'RS256' )
278
290
279
291
with self .assertRaisesRegex (TokenBackendError , 'Invalid algorithm specified' ):
280
292
self .hmac_token_backend .decode (token )
0 commit comments