mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add CODER_OIDC_IGNORE_EMAIL_VERIFIED config knob (#5165)
* Adds a configuration knob CODER_OIDC_IGNORE_EMAIL_VERIFIED that allows ignoring the email_verified OIDC claim * Adds warning message at startup if CODER_OIDC_IGNORE_EMAIL_VERIFIED=true * Adds warning whenever an unverified OIDC email is let through * Skips flaky test on non-linux platforms Co-authored-by: Mathias Fredriksson <mafredri@gmail.com>
This commit is contained in:
co-authored by
Mathias Fredriksson
parent
6ed12ade54
commit
a4a319a76e
@@ -231,6 +231,12 @@ func newConfig() *codersdk.DeploymentConfig {
|
||||
Flag: "oidc-scopes",
|
||||
Default: []string{oidc.ScopeOpenID, "profile", "email"},
|
||||
},
|
||||
IgnoreEmailVerified: &codersdk.DeploymentConfigField[bool]{
|
||||
Name: "OIDC Ignore Email Verified",
|
||||
Usage: "Ignore the email_verified claim from the upstream provider.",
|
||||
Flag: "oidc-ignore-email-verified",
|
||||
Default: false,
|
||||
},
|
||||
},
|
||||
|
||||
Telemetry: &codersdk.TelemetryConfig{
|
||||
|
||||
@@ -122,23 +122,37 @@ func TestConfig(t *testing.T) {
|
||||
require.Equal(t, config.Trace.Enable.Value, true)
|
||||
require.Equal(t, config.Trace.HoneycombAPIKey.Value, "my-honeycomb-key")
|
||||
},
|
||||
}, {
|
||||
Name: "OIDC_Defaults",
|
||||
Env: map[string]string{},
|
||||
Valid: func(config *codersdk.DeploymentConfig) {
|
||||
require.Empty(t, config.OIDC.IssuerURL.Value)
|
||||
require.Empty(t, config.OIDC.EmailDomain.Value)
|
||||
require.Empty(t, config.OIDC.ClientID.Value)
|
||||
require.Empty(t, config.OIDC.ClientSecret.Value)
|
||||
require.True(t, config.OIDC.AllowSignups.Value)
|
||||
require.ElementsMatch(t, config.OIDC.Scopes.Value, []string{"openid", "email", "profile"})
|
||||
require.False(t, config.OIDC.IgnoreEmailVerified.Value)
|
||||
},
|
||||
}, {
|
||||
Name: "OIDC",
|
||||
Env: map[string]string{
|
||||
"CODER_OIDC_ISSUER_URL": "https://accounts.google.com",
|
||||
"CODER_OIDC_EMAIL_DOMAIN": "coder.com",
|
||||
"CODER_OIDC_CLIENT_ID": "client",
|
||||
"CODER_OIDC_CLIENT_SECRET": "secret",
|
||||
"CODER_OIDC_ALLOW_SIGNUPS": "false",
|
||||
"CODER_OIDC_SCOPES": "something,here",
|
||||
"CODER_OIDC_ISSUER_URL": "https://accounts.google.com",
|
||||
"CODER_OIDC_EMAIL_DOMAIN": "coder.com",
|
||||
"CODER_OIDC_CLIENT_ID": "client",
|
||||
"CODER_OIDC_CLIENT_SECRET": "secret",
|
||||
"CODER_OIDC_ALLOW_SIGNUPS": "false",
|
||||
"CODER_OIDC_SCOPES": "something,here",
|
||||
"CODER_OIDC_IGNORE_EMAIL_VERIFIED": "true",
|
||||
},
|
||||
Valid: func(config *codersdk.DeploymentConfig) {
|
||||
require.Equal(t, config.OIDC.IssuerURL.Value, "https://accounts.google.com")
|
||||
require.Equal(t, config.OIDC.EmailDomain.Value, "coder.com")
|
||||
require.Equal(t, config.OIDC.ClientID.Value, "client")
|
||||
require.Equal(t, config.OIDC.ClientSecret.Value, "secret")
|
||||
require.Equal(t, config.OIDC.AllowSignups.Value, false)
|
||||
require.False(t, config.OIDC.AllowSignups.Value)
|
||||
require.Equal(t, config.OIDC.Scopes.Value, []string{"something", "here"})
|
||||
require.True(t, config.OIDC.IgnoreEmailVerified.Value)
|
||||
},
|
||||
}, {
|
||||
Name: "GitHub",
|
||||
|
||||
@@ -398,6 +398,10 @@ func Server(vip *viper.Viper, newAPI func(context.Context, *coderd.Options) (*co
|
||||
return xerrors.Errorf("configure oidc client certificates: %w", err)
|
||||
}
|
||||
|
||||
if cfg.OIDC.IgnoreEmailVerified.Value {
|
||||
logger.Warn(ctx, "coder will not check email_verified for OIDC logins")
|
||||
}
|
||||
|
||||
oidcProvider, err := oidc.NewProvider(ctx, cfg.OIDC.IssuerURL.Value)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("configure oidc provider: %w", err)
|
||||
|
||||
+3
@@ -98,6 +98,9 @@ Flags:
|
||||
--oidc-email-domain string Email domain that clients logging in with
|
||||
OIDC must match.
|
||||
Consumes $CODER_OIDC_EMAIL_DOMAIN
|
||||
--oidc-ignore-email-verified Ignore the email_verified claim from the
|
||||
upstream provider.
|
||||
Consumes $CODER_OIDC_IGNORE_EMAIL_VERIFIED
|
||||
--oidc-issuer-url string Issuer URL to use for Login with OIDC.
|
||||
Consumes $CODER_OIDC_ISSUER_URL
|
||||
--oidc-scopes strings Scopes to grant when authenticating with
|
||||
|
||||
Reference in New Issue
Block a user