@@ -304,39 +304,79 @@ type tokenTest struct {
304
304
expFail []string
305
305
}
306
306
307
- func TestJWT (t * testing.T ) {
307
+ type testClaim map [string ]interface {}
308
+
309
+ func (testClaim ) Valid () error {
310
+ return nil
311
+ }
308
312
309
- makeToken := func () string {
310
- mySigningKey : = []byte ("secret" )
311
- // Create the Claims
312
- claims := & jwt. RegisteredClaims {
313
- IssuedAt : jwt .NewNumericDate ( time . Now ()),
313
+ func TestJWT ( t * testing. T ) {
314
+ var secret = []byte ("secret" )
315
+ issueToken := func ( secret [] byte , method jwt. SigningMethod , input map [ string ] interface {}) string {
316
+ if method == nil {
317
+ method = jwt .SigningMethodHS256
314
318
}
315
- token := jwt .NewWithClaims (jwt .SigningMethodHS256 , claims )
316
- ss , _ := token .SignedString (mySigningKey )
319
+ ss , _ := jwt .NewWithClaims (method , testClaim (input )).SignedString (secret )
317
320
return ss
318
321
}
319
- tests := []originTest {
322
+ tests := []tokenTest {
320
323
{
321
- //expFail: []string{"Bearer ", "Bearer: abc", "Baxonk hello there"},
322
324
expOk : []string {
323
- fmt .Sprintf ("Bearer %v" , makeToken ()),
325
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix ()})),
326
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix () + 4 })),
327
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix () - 4 })),
328
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {
329
+ "iat" : time .Now ().Unix (),
330
+ "exp" : time .Now ().Unix () + 2 ,
331
+ })),
332
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {
333
+ "iat" : time .Now ().Unix (),
334
+ "bar" : "baz" ,
335
+ })),
336
+ },
337
+ expFail : []string {
338
+ // future
339
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix () + 6 })),
340
+ // stale
341
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix () - 6 })),
342
+ // wrong algo
343
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , jwt .SigningMethodHS512 , testClaim {"iat" : time .Now ().Unix () + 4 })),
344
+ // expired
345
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix (), "exp" : time .Now ().Unix ()})),
346
+ // missing mandatory iat
347
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {})),
348
+ // wrong secret
349
+ fmt .Sprintf ("Bearer %v" , issueToken ([]byte ("wrong" ), nil , testClaim {"iat" : time .Now ().Unix ()})),
350
+ fmt .Sprintf ("Bearer %v" , issueToken ([]byte {}, nil , testClaim {"iat" : time .Now ().Unix ()})),
351
+ fmt .Sprintf ("Bearer %v" , issueToken (nil , nil , testClaim {"iat" : time .Now ().Unix ()})),
352
+ // Various malformed syntax
353
+ fmt .Sprintf ("%v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix ()})),
354
+ fmt .Sprintf ("Bearer %v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix ()})),
355
+ fmt .Sprintf ("Bearer: %v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix ()})),
356
+ fmt .Sprintf ("Bearer:%v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix ()})),
357
+ fmt .Sprintf ("Bearer:\t %v" , issueToken (secret , nil , testClaim {"iat" : time .Now ().Unix ()})),
324
358
},
325
359
},
326
360
}
327
-
328
361
for _ , tc := range tests {
329
362
srv := createAndStartServer (t , & httpConfig {jwtSecret : []byte ("secret" )},
330
363
true , & wsConfig {Origins : []string {"*" }, jwtSecret : []byte ("secret" )})
331
- url := fmt .Sprintf ("ws://%v" , srv .listenAddr ())
364
+ wsUrl := fmt .Sprintf ("ws://%v" , srv .listenAddr ())
365
+ htUrl := fmt .Sprintf ("http://%v" , srv .listenAddr ())
332
366
for i , token := range tc .expOk {
333
- if err := wsRequest (t , url , "Authorization" , token ); err != nil {
334
- t .Errorf ("test %d, token '%v': expected ok, got %v" , i , token , err )
367
+ if err := wsRequest (t , wsUrl , "Authorization" , token ); err != nil {
368
+ t .Errorf ("test %d-ws, token '%v': expected ok, got %v" , i , token , err )
369
+ }
370
+ if resp := rpcRequest (t , htUrl , "Authorization" , token ); resp .StatusCode != 200 {
371
+ t .Errorf ("test %d-http, token '%v': expected ok, got %v" , i , token , resp .StatusCode )
335
372
}
336
373
}
337
374
for i , token := range tc .expFail {
338
- if err := wsRequest (t , url , "Authorization" , token ); err == nil {
339
- t .Errorf ("tc %d, token '%v': expected not to allow, got ok" , i , token )
375
+ if err := wsRequest (t , wsUrl , "Authorization" , token ); err == nil {
376
+ t .Errorf ("tc %d-ws, token '%v': expected not to allow, got ok" , i , token )
377
+ }
378
+ if resp := rpcRequest (t , htUrl , "Authorization" , token ); resp .StatusCode != 403 {
379
+ t .Errorf ("tc %d-http, token '%v': expected not to allow, got %v" , i , token , resp .StatusCode )
340
380
}
341
381
}
342
382
srv .stop ()
0 commit comments