@@ -347,6 +347,10 @@ func TestOIDC_AuthorizeSSHSign(t *testing.T) {
347
347
assert .FatalError (t , err )
348
348
p3 , err := generateOIDC ()
349
349
assert .FatalError (t , err )
350
+ p4 , err := generateOIDC ()
351
+ assert .FatalError (t , err )
352
+ p5 , err := generateOIDC ()
353
+ assert .FatalError (t , err )
350
354
// Admin + Domains
351
355
p3 .Admins = []string {"name@smallstep.com" , "root@example.com" }
352
356
p3 .Domains = []string {"smallstep.com" }
@@ -356,12 +360,27 @@ func TestOIDC_AuthorizeSSHSign(t *testing.T) {
356
360
p1 .ConfigurationEndpoint = srv .URL + "/.well-known/openid-configuration"
357
361
p2 .ConfigurationEndpoint = srv .URL + "/.well-known/openid-configuration"
358
362
p3 .ConfigurationEndpoint = srv .URL + "/.well-known/openid-configuration"
363
+ p4 .ConfigurationEndpoint = srv .URL + "/.well-known/openid-configuration"
364
+ p5 .ConfigurationEndpoint = srv .URL + "/.well-known/openid-configuration"
359
365
assert .FatalError (t , p1 .Init (config ))
360
366
assert .FatalError (t , p2 .Init (config ))
361
367
assert .FatalError (t , p3 .Init (config ))
368
+ assert .FatalError (t , p4 .Init (config ))
369
+ assert .FatalError (t , p5 .Init (config ))
370
+
371
+ p4 .getIdentityFunc = func (p Interface , email string ) (* Identity , error ) {
372
+ return & Identity {Usernames : []string {"max" , "mariano" }}, nil
373
+ }
374
+ p5 .getIdentityFunc = func (p Interface , email string ) (* Identity , error ) {
375
+ return nil , errors .New ("force" )
376
+ }
362
377
363
378
t1 , err := generateSimpleToken ("the-issuer" , p1 .ClientID , & keys .Keys [0 ])
364
379
assert .FatalError (t , err )
380
+ okGetIdentityToken , err := generateSimpleToken ("the-issuer" , p4 .ClientID , & keys .Keys [0 ])
381
+ assert .FatalError (t , err )
382
+ failGetIdentityToken , err := generateSimpleToken ("the-issuer" , p5 .ClientID , & keys .Keys [0 ])
383
+ assert .FatalError (t , err )
365
384
// Admin email not in domains
366
385
okAdmin , err := generateToken ("subject" , "the-issuer" , p3 .ClientID , "root@example.com" , []string {}, time .Now (), & keys .Keys [0 ])
367
386
assert .FatalError (t , err )
@@ -384,11 +403,11 @@ func TestOIDC_AuthorizeSSHSign(t *testing.T) {
384
403
userDuration := p1 .claimer .DefaultUserSSHCertDuration ()
385
404
hostDuration := p1 .claimer .DefaultHostSSHCertDuration ()
386
405
expectedUserOptions := & SSHOptions {
387
- CertType : "user" , Principals : []string {"name" },
406
+ CertType : "user" , Principals : []string {"name" , "name@smallstep.com" },
388
407
ValidAfter : NewTimeDuration (tm ), ValidBefore : NewTimeDuration (tm .Add (userDuration )),
389
408
}
390
409
expectedAdminOptions := & SSHOptions {
391
- CertType : "user" , Principals : []string {"root" },
410
+ CertType : "user" , Principals : []string {"root" , "root@example.com" },
392
411
ValidAfter : NewTimeDuration (tm ), ValidBefore : NewTimeDuration (tm .Add (userDuration )),
393
412
}
394
413
expectedHostOptions := & SSHOptions {
@@ -412,17 +431,32 @@ func TestOIDC_AuthorizeSSHSign(t *testing.T) {
412
431
{"ok" , p1 , args {t1 , SSHOptions {}, pub }, expectedUserOptions , false , false },
413
432
{"ok-rsa2048" , p1 , args {t1 , SSHOptions {}, rsa2048 .Public ()}, expectedUserOptions , false , false },
414
433
{"ok-user" , p1 , args {t1 , SSHOptions {CertType : "user" }, pub }, expectedUserOptions , false , false },
415
- {"ok-principals" , p1 , args {t1 , SSHOptions {Principals : []string {"name" }}, pub }, expectedUserOptions , false , false },
416
- {"ok-options" , p1 , args {t1 , SSHOptions {CertType : "user" , Principals : []string {"name" }}, pub }, expectedUserOptions , false , false },
434
+ {"ok-principals" , p1 , args {t1 , SSHOptions {Principals : []string {"name" }}, pub },
435
+ & SSHOptions {CertType : "user" , Principals : []string {"name" },
436
+ ValidAfter : NewTimeDuration (tm ), ValidBefore : NewTimeDuration (tm .Add (userDuration ))}, false , false },
437
+ {"ok-principals-getIdentity" , p4 , args {okGetIdentityToken , SSHOptions {Principals : []string {"mariano" }}, pub },
438
+ & SSHOptions {CertType : "user" , Principals : []string {"mariano" },
439
+ ValidAfter : NewTimeDuration (tm ), ValidBefore : NewTimeDuration (tm .Add (userDuration ))}, false , false },
440
+ {"ok-emptyPrincipals-getIdentity" , p4 , args {okGetIdentityToken , SSHOptions {}, pub },
441
+ & SSHOptions {CertType : "user" , Principals : []string {"max" , "mariano" },
442
+ ValidAfter : NewTimeDuration (tm ), ValidBefore : NewTimeDuration (tm .Add (userDuration ))}, false , false },
443
+ {"ok-options" , p1 , args {t1 , SSHOptions {CertType : "user" , Principals : []string {"name" }}, pub },
444
+ & SSHOptions {CertType : "user" , Principals : []string {"name" },
445
+ ValidAfter : NewTimeDuration (tm ), ValidBefore : NewTimeDuration (tm .Add (userDuration ))}, false , false },
417
446
{"admin" , p3 , args {okAdmin , SSHOptions {}, pub }, expectedAdminOptions , false , false },
418
447
{"admin-user" , p3 , args {okAdmin , SSHOptions {CertType : "user" }, pub }, expectedAdminOptions , false , false },
419
- {"admin-principals" , p3 , args {okAdmin , SSHOptions {Principals : []string {"root" }}, pub }, expectedAdminOptions , false , false },
420
- {"admin-options" , p3 , args {okAdmin , SSHOptions {CertType : "user" , Principals : []string {"name" }}, pub }, expectedUserOptions , false , false },
448
+ {"admin-principals" , p3 , args {okAdmin , SSHOptions {Principals : []string {"root" }}, pub },
449
+ & SSHOptions {CertType : "user" , Principals : []string {"root" },
450
+ ValidAfter : NewTimeDuration (tm ), ValidBefore : NewTimeDuration (tm .Add (userDuration ))}, false , false },
451
+ {"admin-options" , p3 , args {okAdmin , SSHOptions {CertType : "user" , Principals : []string {"name" }}, pub },
452
+ & SSHOptions {CertType : "user" , Principals : []string {"name" },
453
+ ValidAfter : NewTimeDuration (tm ), ValidBefore : NewTimeDuration (tm .Add (userDuration ))}, false , false },
421
454
{"admin-host" , p3 , args {okAdmin , SSHOptions {CertType : "host" , Principals : []string {"smallstep.com" }}, pub }, expectedHostOptions , false , false },
422
455
{"fail-rsa1024" , p1 , args {t1 , SSHOptions {}, rsa1024 .Public ()}, expectedUserOptions , false , true },
423
456
{"fail-user-host" , p1 , args {t1 , SSHOptions {CertType : "host" }, pub }, nil , false , true },
424
457
{"fail-user-principals" , p1 , args {t1 , SSHOptions {Principals : []string {"root" }}, pub }, nil , false , true },
425
458
{"fail-email" , p3 , args {failEmail , SSHOptions {}, pub }, nil , true , false },
459
+ {"fail-getIdentity" , p5 , args {failGetIdentityToken , SSHOptions {}, pub }, nil , true , false },
426
460
}
427
461
for _ , tt := range tests {
428
462
t .Run (tt .name , func (t * testing.T ) {
0 commit comments