@@ -480,7 +480,8 @@ func TestUserOIDC(t *testing.T) {
480
480
481
481
for _ , tc := range []struct {
482
482
Name string
483
- Claims jwt.MapClaims
483
+ IDTokenClaims jwt.MapClaims
484
+ UserInfoClaims jwt.MapClaims
484
485
AllowSignups bool
485
486
EmailDomain []string
486
487
Username string
@@ -489,31 +490,31 @@ func TestUserOIDC(t *testing.T) {
489
490
IgnoreEmailVerified bool
490
491
}{{
491
492
Name : "EmailOnly" ,
492
- Claims : jwt.MapClaims {
493
+ IDTokenClaims : jwt.MapClaims {
493
494
"email" : "kyle@kwc.io" ,
494
495
},
495
496
AllowSignups : true ,
496
497
StatusCode : http .StatusTemporaryRedirect ,
497
498
Username : "kyle" ,
498
499
}, {
499
500
Name : "EmailNotVerified" ,
500
- Claims : jwt.MapClaims {
501
+ IDTokenClaims : jwt.MapClaims {
501
502
"email" : "kyle@kwc.io" ,
502
503
"email_verified" : false ,
503
504
},
504
505
AllowSignups : true ,
505
506
StatusCode : http .StatusForbidden ,
506
507
}, {
507
508
Name : "EmailNotAString" ,
508
- Claims : jwt.MapClaims {
509
+ IDTokenClaims : jwt.MapClaims {
509
510
"email" : 3.14159 ,
510
511
"email_verified" : false ,
511
512
},
512
513
AllowSignups : true ,
513
514
StatusCode : http .StatusBadRequest ,
514
515
}, {
515
516
Name : "EmailNotVerifiedIgnored" ,
516
- Claims : jwt.MapClaims {
517
+ IDTokenClaims : jwt.MapClaims {
517
518
"email" : "kyle@kwc.io" ,
518
519
"email_verified" : false ,
519
520
},
@@ -523,7 +524,7 @@ func TestUserOIDC(t *testing.T) {
523
524
IgnoreEmailVerified : true ,
524
525
}, {
525
526
Name : "NotInRequiredEmailDomain" ,
526
- Claims : jwt.MapClaims {
527
+ IDTokenClaims : jwt.MapClaims {
527
528
"email" : "kyle@kwc.io" ,
528
529
"email_verified" : true ,
529
530
},
@@ -534,7 +535,7 @@ func TestUserOIDC(t *testing.T) {
534
535
StatusCode : http .StatusForbidden ,
535
536
}, {
536
537
Name : "EmailDomainCaseInsensitive" ,
537
- Claims : jwt.MapClaims {
538
+ IDTokenClaims : jwt.MapClaims {
538
539
"email" : "kyle@KWC.io" ,
539
540
"email_verified" : true ,
540
541
},
@@ -544,20 +545,20 @@ func TestUserOIDC(t *testing.T) {
544
545
},
545
546
StatusCode : http .StatusTemporaryRedirect ,
546
547
}, {
547
- Name : "EmptyClaims" ,
548
- Claims : jwt.MapClaims {},
549
- AllowSignups : true ,
550
- StatusCode : http .StatusBadRequest ,
548
+ Name : "EmptyClaims" ,
549
+ IDTokenClaims : jwt.MapClaims {},
550
+ AllowSignups : true ,
551
+ StatusCode : http .StatusBadRequest ,
551
552
}, {
552
553
Name : "NoSignups" ,
553
- Claims : jwt.MapClaims {
554
+ IDTokenClaims : jwt.MapClaims {
554
555
"email" : "kyle@kwc.io" ,
555
556
"email_verified" : true ,
556
557
},
557
558
StatusCode : http .StatusForbidden ,
558
559
}, {
559
560
Name : "UsernameFromEmail" ,
560
- Claims : jwt.MapClaims {
561
+ IDTokenClaims : jwt.MapClaims {
561
562
"email" : "kyle@kwc.io" ,
562
563
"email_verified" : true ,
563
564
},
@@ -566,7 +567,7 @@ func TestUserOIDC(t *testing.T) {
566
567
StatusCode : http .StatusTemporaryRedirect ,
567
568
}, {
568
569
Name : "UsernameFromClaims" ,
569
- Claims : jwt.MapClaims {
570
+ IDTokenClaims : jwt.MapClaims {
570
571
"email" : "kyle@kwc.io" ,
571
572
"email_verified" : true ,
572
573
"preferred_username" : "hotdog" ,
@@ -578,7 +579,7 @@ func TestUserOIDC(t *testing.T) {
578
579
// Services like Okta return the email as the username:
579
580
// https://developer.okta.com/docs/reference/api/oidc/#base-claims-always-present
580
581
Name : "UsernameAsEmail" ,
581
- Claims : jwt.MapClaims {
582
+ IDTokenClaims : jwt.MapClaims {
582
583
"email" : "kyle@kwc.io" ,
583
584
"email_verified" : true ,
584
585
"preferred_username" : "kyle@kwc.io" ,
@@ -589,21 +590,35 @@ func TestUserOIDC(t *testing.T) {
589
590
}, {
590
591
// See: https://github.com/coder/coder/issues/4472
591
592
Name : "UsernameIsEmail" ,
592
- Claims : jwt.MapClaims {
593
+ IDTokenClaims : jwt.MapClaims {
593
594
"preferred_username" : "kyle@kwc.io" ,
594
595
},
595
596
Username : "kyle" ,
596
597
AllowSignups : true ,
597
598
StatusCode : http .StatusTemporaryRedirect ,
598
599
}, {
599
600
Name : "WithPicture" ,
600
- Claims : jwt.MapClaims {
601
+ IDTokenClaims : jwt.MapClaims {
602
+ "email" : "kyle@kwc.io" ,
603
+ "email_verified" : true ,
604
+ "preferred_username" : "kyle" ,
605
+ "picture" : "/example.png" ,
606
+ },
607
+ Username : "kyle" ,
608
+ AllowSignups : true ,
609
+ AvatarURL : "/example.png" ,
610
+ StatusCode : http .StatusTemporaryRedirect ,
611
+ }, {
612
+ Name : "WithUserInfoClaims" ,
613
+ IDTokenClaims : jwt.MapClaims {
601
614
"email" : "kyle@kwc.io" ,
602
615
"email_verified" : true ,
603
- "username" : "kyle" ,
604
- "picture" : "/example.png" ,
605
616
},
606
- Username : "kyle" ,
617
+ UserInfoClaims : jwt.MapClaims {
618
+ "preferred_username" : "potato" ,
619
+ "picture" : "/example.png" ,
620
+ },
621
+ Username : "potato" ,
607
622
AllowSignups : true ,
608
623
AvatarURL : "/example.png" ,
609
624
StatusCode : http .StatusTemporaryRedirect ,
@@ -613,15 +628,15 @@ func TestUserOIDC(t *testing.T) {
613
628
t .Parallel ()
614
629
conf := coderdtest .NewOIDCConfig (t , "" )
615
630
616
- config := conf .OIDCConfig ()
631
+ config := conf .OIDCConfig (t , tc . UserInfoClaims )
617
632
config .AllowSignups = tc .AllowSignups
618
633
config .EmailDomain = tc .EmailDomain
619
634
config .IgnoreEmailVerified = tc .IgnoreEmailVerified
620
635
621
636
client := coderdtest .New (t , & coderdtest.Options {
622
637
OIDCConfig : config ,
623
638
})
624
- resp := oidcCallback (t , client , conf .EncodeClaims (t , tc .Claims ))
639
+ resp := oidcCallback (t , client , conf .EncodeClaims (t , tc .IDTokenClaims ))
625
640
assert .Equal (t , tc .StatusCode , resp .StatusCode )
626
641
627
642
ctx , _ := testutil .Context (t )
@@ -647,7 +662,7 @@ func TestUserOIDC(t *testing.T) {
647
662
648
663
conf := coderdtest .NewOIDCConfig (t , "" )
649
664
650
- config := conf .OIDCConfig ()
665
+ config := conf .OIDCConfig (t , nil )
651
666
config .AllowSignups = true
652
667
653
668
client := coderdtest .New (t , & coderdtest.Options {
@@ -705,6 +720,7 @@ func TestUserOIDC(t *testing.T) {
705
720
verifier := oidc .NewVerifier ("" , & oidc.StaticKeySet {
706
721
PublicKeys : []crypto.PublicKey {},
707
722
}, & oidc.Config {})
723
+ provider := & oidc.Provider {}
708
724
709
725
client := coderdtest .New (t , & coderdtest.Options {
710
726
OIDCConfig : & coderd.OIDCConfig {
@@ -715,6 +731,7 @@ func TestUserOIDC(t *testing.T) {
715
731
"id_token" : "invalid" ,
716
732
}),
717
733
},
734
+ Provider : provider ,
718
735
Verifier : verifier ,
719
736
},
720
737
})
0 commit comments