@@ -11,12 +11,12 @@ defmodule RealtimeWeb.JwtVerificationTest do
11
11
setup_all do
12
12
Application . put_env ( :realtime , :jwt_secret , @ jwt_secret )
13
13
Application . put_env ( :realtime , :jwt_claim_validators , % { } )
14
- on_exit ( fn -> Application . put_env ( :realtime , :jwt_claim_validators , % { } ) end )
15
14
:ok
16
15
end
17
16
18
17
setup do
19
18
start_supervised ( Mock )
19
+ on_exit ( fn -> Application . put_env ( :realtime , :jwt_claim_validators , % { } ) end )
20
20
:ok
21
21
end
22
22
@@ -218,7 +218,26 @@ defmodule RealtimeWeb.JwtVerificationTest do
218
218
"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImtleS1pZC0xIn0.eyJpYXQiOjE3MTIwNDc1NjUsInJvbGUiOiJhdXRoZW50aWNhdGVkIiwic3ViIjoidXNlci1pZCIsImV4cCI6MTcxMjA1MTE2NX0.zUeoZrWK1efAc4q9y978_9qkhdXktdjf5H8O9Rw0SHcPaXW8OBcuNR2huRrgORvqFx6_sHn6nCJaWkZGzO-f8wskMD7Z4INq2JUypr6nASie3Qu2lLyeY3WTInaXNAKH-oqlfTLRskbz8zkIxOj2bBJiN9ceQLkJU-c92ndiuiG5D1jyQrGsvRdFem_cemp0yOoEaC0XWdjeV6C_UD-34GIyv3o8H4HZg1GcCiyNnAfDmLAcTOQPmqkwsRDQb-pm5O3HwpQt9WHOB6i1vzf-nmIGyCRA7STPdALK16-aiAyT4SJRxM5WN3iK8yitH7g4JETb9WocBbwIM_zfNnUI5w"
219
219
220
220
# Check that the signature is valid even though time may be off.
221
- assert { :error , :signature_error } != JwtVerification . verify ( token , @ jwt_secret , jwks )
221
+ assert JwtVerification . verify ( token , @ jwt_secret , jwks ) != { :error , :signature_error }
222
+ end
223
+
224
+ test "using RS256 JWK but wrong signature" do
225
+ jwks = % {
226
+ "keys" => [
227
+ % {
228
+ "kty" => "RSA" ,
229
+ "n" =>
230
+ "6r1mKwCalvJ0NyThyQkBr5huFILwwhXcxtsdlw-WybNz4avzODQwLFkA-b2fnnfdFgualV2NdcvoJSo1bzVGCWWqwWKWdTQKFjtcjAIC4FnhOv5ynNF9Ub-11ORDd1aiq_4XKNA4GaS1HqBekVDAAvJYy99Jz0CkLx4NU_VrS0U9sOQzUAhy2MwZCx2kZ3SWKEMjjEIkbvIb22IdRTyuFsAndKGpyzhw-MalnU5P2hOig-QApNBc0WJtTHTAa4PLQ6v_5jNc5PzCwP8jGK9SlrSF-GOnx9BVBX9t-AIDp-BviKbtY7y-pku6-f7HSiS2T3iAJkHXPm9E_NwwhWzMJQ" ,
231
+ "e" => "AQAB" ,
232
+ "kid" => "key-id-1"
233
+ }
234
+ ]
235
+ }
236
+
237
+ token =
238
+ "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImtleS1pZC0xIn0.eyJpYXQiOjE3MTIwNDc1NjUsInJvbGUiOiJhdXRoZW50aWNhdGVkIiwic3ViIjoidXNlci1pZCIsImV4cCI6MTcxMjA1MTE2NX0.zUeoZrWK1efAc4q9y978_9qkhdXktdjf5H8O9Rw0SHcPaXW8OBcuNR2huRrgORvqFx6_sHn6nCJaWkZGzO-f8wskMD7Z4INq2JUypr6nASie3Qu2lLyeY3WTInaXNAKH-oqlfTLRskbz8zkIxOj2bBJiN9ceQLkJU-c92ndiuiG5D1jyQrGsvRdFem_cemp0yOoEaC0XWdjeV6C_UD-34GIyv3o8H4HZg1GcCiyNnAfDmLAcTOQPmqkwsRDQb-pm5O3HwpQt9WHOB6i1vzf-nmIGyCRA7STPdALK16-aiAyT4SJRxM5WN3iK8yitH7g4JETb9WocBbwIM_zfnnUI5w"
239
+
240
+ assert JwtVerification . verify ( token , @ jwt_secret , jwks ) == { :error , :signature_error }
222
241
end
223
242
224
243
test "using ES256 JWK" do
@@ -239,7 +258,68 @@ defmodule RealtimeWeb.JwtVerificationTest do
239
258
"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6ImtleS1pZC0xIn0.eyJpYXQiOjE3MTIwNDk2NTcsInJvbGUiOiJhdXRoZW50aWNhdGVkIiwic3ViIjoidXNlci1pZCIsImV4cCI6MTcxMjA1MzI1N30.IIQBuEiSnZacGMqiqsrLAeRGOjIaB4F3x1gnLN5zvhFryJ-6tdgu96lFv5HUF13IL2UfHWad0OuvoDt4DEHRxw"
240
259
241
260
# Check that the signature is valid even though time may be off.
242
- assert { :error , :signature_error } != JwtVerification . verify ( token , @ jwt_secret , jwks )
261
+ assert JwtVerification . verify ( token , @ jwt_secret , jwks ) != { :error , :signature_error }
262
+ end
263
+
264
+ test "using ES256 JWK with wrong signature" do
265
+ jwks = % {
266
+ "keys" => [
267
+ % {
268
+ "kty" => "EC" ,
269
+ "x" => "iX_niXPSL2nW-9IyCELzyceAtuE3B98pWML5tQGACD4" ,
270
+ "y" => "kT02DoLhXx6gtpkbrN8XwQ2wtzE6cDBaqlWgVXIeqV0" ,
271
+ "crv" => "P-256" ,
272
+ "d" => "FBVYnsYA2C3FTggEwV8kCRMo4FLl220_cWY2RdXyb_8" ,
273
+ "kid" => "key-id-1"
274
+ }
275
+ ]
276
+ }
277
+
278
+ token =
279
+ "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6ImtleS1pZC0xIn0.eyJpYXQiOjE3MTIwNDk2NTcsInJvbGUiOiJhdXRoZW50aWNhdGVkIiwic3ViIjoidXNlci1pZCIsImV4cCI6MTcxMjA1MzI1N30.IIQBuEiSnZacGMqiqsrLAeRGOjIaB4F3x1gnLN5zvhFryJ-6tdgu96lFv5HUF13IL2UfHWad0OuvoDt4DEHrxw"
280
+
281
+ assert JwtVerification . verify ( token , @ jwt_secret , jwks ) == { :error , :signature_error }
282
+ end
283
+
284
+ test "using HS256 JWK" do
285
+ jwks = % {
286
+ "keys" => [
287
+ % {
288
+ "alg" => "HS256" ,
289
+ "k" =>
290
+ "WWpiUEVXK2I4dVM1djkzMS9TWTNmb2RtcUtiZVh3NnBHS0JaS1JDMGpaODdhVHpaZ3N0Ly9yMG0wU1M4Z1U4OFE0aGdwclBMMzVRRU5ya253TWxhUlE9PQ" ,
291
+ "key_ops" => [ "verify" ] ,
292
+ "kid" => "4FcGwlBxkBV1bSZw" ,
293
+ "kty" => "oct"
294
+ }
295
+ ]
296
+ }
297
+
298
+ token =
299
+ "eyJhbGciOiJIUzI1NiIsImtpZCI6IjRGY0d3bEJ4a0JWMWJTWnciLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2hqbmRnYWdpZGlwY3RxdXFxeXloLnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJmZjA0NjVlMy1lZjk3LTRkYjItOWE1Zi0zZDI4Y2YxODE0MmYiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzUyODA4NjE4LCJpYXQiOjE3NTI4MDUwMTgsImVtYWlsIjoiY2hhdEBlZHVhcmRvLmd1cmdlbC5tZSIsInBob25lIjoiIiwiYXBwX21ldGFkYXRhIjp7InByb3ZpZGVyIjoiZW1haWwiLCJwcm92aWRlcnMiOlsiZW1haWwiXX0sInVzZXJfbWV0YWRhdGEiOnsiZW1haWwiOiJjaGF0QGVkdWFyZG8uZ3VyZ2VsLm1lIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInBob25lX3ZlcmlmaWVkIjpmYWxzZSwic3ViIjoiZmYwNDY1ZTMtZWY5Ny00ZGIyLTlhNWYtM2QyOGNmMTgxNDJmIn0sInJvbGUiOiJhdXRoZW50aWNhdGVkIiwiYWFsIjoiYWFsMSIsImFtciI6W3sibWV0aG9kIjoicGFzc3dvcmQiLCJ0aW1lc3RhbXAiOjE3NTI4MDUwMTh9XSwic2Vzc2lvbl9pZCI6IjA2MDJkYWM0LWMwMjctNGIwNi1hZDM5LTMzN2ViMTZlODdlNSIsImlzX2Fub255bW91cyI6ZmFsc2V9.SnGzRjLfHPtT64kXYEQVBLKizCl76LqEPILyAPxoDwk"
300
+
301
+ # Check that the signature is valid even though time may be off.
302
+ assert JwtVerification . verify ( token , @ jwt_secret , jwks ) != { :error , :signature_error }
303
+ end
304
+
305
+ test "using HS256 JWK with wrong signature" do
306
+ jwks = % {
307
+ "keys" => [
308
+ % {
309
+ "alg" => "HS256" ,
310
+ "k" =>
311
+ "WWpiUEVXK2I4dVM1djkzMS9TWTNmb2RtcUtiZVh3NnBHS0JaS1JDMGpaODdhVHpaZ3N0Ly9yMG0wU1M4Z1U4OFE0aGdwclBMMzVRRU5ya253TWxhUlE9PQ" ,
312
+ "key_ops" => [ "verify" ] ,
313
+ "kid" => "4FcGwlBxkBV1bSZw" ,
314
+ "kty" => "oct"
315
+ }
316
+ ]
317
+ }
318
+
319
+ token =
320
+ "eyJhbGciOiJIUzI1NiIsImtpZCI6IjRGY0d3bEJ4a0JWMWJTWnciLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2hqbmRnYWdpZGlwY3RxdXFxeXloLnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJmZjA0NjVlMy1lZjk3LTRkYjItOWE1Zi0zZDI4Y2YxODE0MmYiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzUyODA4NjE4LCJpYXQiOjE3NTI4MDUwMTgsImVtYWlsIjoiY2hhdEBlZHVhcmRvLmd1cmdlbC5tZSIsInBob25lIjoiIiwiYXBwX21ldGFkYXRhIjp7InByb3ZpZGVyIjoiZW1haWwiLCJwcm92aWRlcnMiOlsiZW1haWwiXX0sInVzZXJfbWV0YWRhdGEiOnsiZW1haWwiOiJjaGF0QGVkdWFyZG8uZ3VyZ2VsLm1lIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInBob25lX3ZlcmlmaWVkIjpmYWxzZSwic3ViIjoiZmYwNDY1ZTMtZWY5Ny00ZGIyLTlhNWYtM2QyOGNmMTgxNDJmIn0sInJvbGUiOiJhdXRoZW50aWNhdGVkIiwiYWFsIjoiYWFsMSIsImFtciI6W3sibWV0aG9kIjoicGFzc3dvcmQiLCJ0aW1lc3RhbXAiOjE3NTI4MDUwMTh9XSwic2Vzc2lvbl9pZCI6IjA2MDJkYWM0LWMwMjctNGIwNi1hZDM5LTMzN2ViMTZlODdlNSIsImlzX2Fub255bW91cyI6ZmFsc2V9.SnGzRjLfHPtT64kXYEQVBLKizCl76LqEPILyApxoDwk"
321
+
322
+ assert JwtVerification . verify ( token , @ jwt_secret , jwks ) == { :error , :signature_error }
243
323
end
244
324
245
325
test "returns error when no matching JWK is found for RSA algorithm" do
0 commit comments