diff --git a/api/v1alpha1/organization_types.go b/api/v1alpha1/organization_types.go old mode 100644 new mode 100755 index e078ab2dd..e55d4abdf --- a/api/v1alpha1/organization_types.go +++ b/api/v1alpha1/organization_types.go @@ -85,6 +85,19 @@ type OIDCConfig struct { // OAuth2ClientRedirectURIs are a registered set of redirect URIs. When redirecting from the idproxy to // the client application, the URI requested to redirect to must be contained in this list. OAuth2ClientRedirectURIs []string `json:"oauth2ClientRedirectURIs,omitempty"` + // ExtraConfig contains additional OIDC configuration for claim mapping and token validation behavior. + ExtraConfig *OIDCExtraConfig `json:"extraConfig,omitempty"` +} + +type OIDCExtraConfig struct { + // InsecureSkipEmailVerified if set to true, treats email_verified as true when the claim is absent from the ID token. + // This does not override an explicit email_verified=false. Only enable for providers that omit the claim entirely (e.g. some Okta, EntraID or CloudFoundry configurations). + // +kubebuilder:default:=false + InsecureSkipEmailVerified bool `json:"insecureSkipEmailVerified,omitempty"` + // UserIDClaim is the claim to be used as both user ID and username. + // When set, it overrides both UserIDKey and UserNameKey in the dex OIDC connector config. + // +kubebuilder:default:="login_name" + UserIDClaim string `json:"userIDClaim,omitempty"` } type SCIMConfig struct { diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 9a6a8fb42..f036f579f 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -861,6 +861,11 @@ func (in *OIDCConfig) DeepCopyInto(out *OIDCConfig) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.ExtraConfig != nil { + in, out := &in.ExtraConfig, &out.ExtraConfig + *out = new(OIDCExtraConfig) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OIDCConfig. @@ -873,6 +878,21 @@ func (in *OIDCConfig) DeepCopy() *OIDCConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OIDCExtraConfig) DeepCopyInto(out *OIDCExtraConfig) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OIDCExtraConfig. +func (in *OIDCExtraConfig) DeepCopy() *OIDCExtraConfig { + if in == nil { + return nil + } + out := new(OIDCExtraConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OptionsOverride) DeepCopyInto(out *OptionsOverride) { *out = *in diff --git a/charts/manager/crds/greenhouse.sap_catalogs.yaml b/charts/manager/crds/greenhouse.sap_catalogs.yaml index 48bf3de2a..93ba9aeb7 100644 --- a/charts/manager/crds/greenhouse.sap_catalogs.yaml +++ b/charts/manager/crds/greenhouse.sap_catalogs.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: catalogs.greenhouse.sap spec: group: greenhouse.sap diff --git a/charts/manager/crds/greenhouse.sap_clusterkubeconfigs.yaml b/charts/manager/crds/greenhouse.sap_clusterkubeconfigs.yaml index b3850d16a..80ee964aa 100644 --- a/charts/manager/crds/greenhouse.sap_clusterkubeconfigs.yaml +++ b/charts/manager/crds/greenhouse.sap_clusterkubeconfigs.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: clusterkubeconfigs.greenhouse.sap spec: group: greenhouse.sap diff --git a/charts/manager/crds/greenhouse.sap_clusterplugindefinitions.yaml b/charts/manager/crds/greenhouse.sap_clusterplugindefinitions.yaml index 1d2934629..ce044ba36 100644 --- a/charts/manager/crds/greenhouse.sap_clusterplugindefinitions.yaml +++ b/charts/manager/crds/greenhouse.sap_clusterplugindefinitions.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: clusterplugindefinitions.greenhouse.sap spec: group: greenhouse.sap diff --git a/charts/manager/crds/greenhouse.sap_clusters.yaml b/charts/manager/crds/greenhouse.sap_clusters.yaml index 285292d74..48abd996a 100644 --- a/charts/manager/crds/greenhouse.sap_clusters.yaml +++ b/charts/manager/crds/greenhouse.sap_clusters.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: clusters.greenhouse.sap spec: group: greenhouse.sap diff --git a/charts/manager/crds/greenhouse.sap_organizations.yaml b/charts/manager/crds/greenhouse.sap_organizations.yaml index 3873d2d53..8ac21917b 100644 --- a/charts/manager/crds/greenhouse.sap_organizations.yaml +++ b/charts/manager/crds/greenhouse.sap_organizations.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: organizations.greenhouse.sap spec: group: greenhouse.sap @@ -92,6 +92,23 @@ spec: - key - name type: object + extraConfig: + description: ExtraConfig contains additional OIDC configuration + for claim mapping and token validation behavior. + properties: + insecureSkipEmailVerified: + default: false + description: |- + InsecureSkipEmailVerified if set to true, treats email_verified as true when the claim is absent from the ID token. + This does not override an explicit email_verified=false. Only enable for providers that omit the claim entirely (e.g. some Okta, EntraID or CloudFoundry configurations). + type: boolean + userIDClaim: + default: login_name + description: |- + UserIDClaim is the claim to be used as both user ID and username. + When set, it overrides both UserIDKey and UserNameKey in the dex OIDC connector config. + type: string + type: object issuer: description: Issuer is the URL of the identity service. type: string diff --git a/charts/manager/crds/greenhouse.sap_plugindefinitions.yaml b/charts/manager/crds/greenhouse.sap_plugindefinitions.yaml index d85bbd8d6..f61a82921 100644 --- a/charts/manager/crds/greenhouse.sap_plugindefinitions.yaml +++ b/charts/manager/crds/greenhouse.sap_plugindefinitions.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: plugindefinitions.greenhouse.sap spec: group: greenhouse.sap diff --git a/charts/manager/crds/greenhouse.sap_pluginpresets.yaml b/charts/manager/crds/greenhouse.sap_pluginpresets.yaml index 08ac86452..55af83d7c 100644 --- a/charts/manager/crds/greenhouse.sap_pluginpresets.yaml +++ b/charts/manager/crds/greenhouse.sap_pluginpresets.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: pluginpresets.greenhouse.sap spec: group: greenhouse.sap diff --git a/charts/manager/crds/greenhouse.sap_plugins.yaml b/charts/manager/crds/greenhouse.sap_plugins.yaml index 1ace7d008..e016b0476 100644 --- a/charts/manager/crds/greenhouse.sap_plugins.yaml +++ b/charts/manager/crds/greenhouse.sap_plugins.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: plugins.greenhouse.sap spec: group: greenhouse.sap diff --git a/charts/manager/crds/greenhouse.sap_teamrolebindings.yaml b/charts/manager/crds/greenhouse.sap_teamrolebindings.yaml index 0e6e02d1c..ed3db6e8a 100644 --- a/charts/manager/crds/greenhouse.sap_teamrolebindings.yaml +++ b/charts/manager/crds/greenhouse.sap_teamrolebindings.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: teamrolebindings.greenhouse.sap spec: group: greenhouse.sap diff --git a/charts/manager/crds/greenhouse.sap_teamroles.yaml b/charts/manager/crds/greenhouse.sap_teamroles.yaml index ecd3cc24f..2439217df 100644 --- a/charts/manager/crds/greenhouse.sap_teamroles.yaml +++ b/charts/manager/crds/greenhouse.sap_teamroles.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: teamroles.greenhouse.sap spec: group: greenhouse.sap diff --git a/charts/manager/crds/greenhouse.sap_teams.yaml b/charts/manager/crds/greenhouse.sap_teams.yaml index 764010e5a..abe5ca3ca 100644 --- a/charts/manager/crds/greenhouse.sap_teams.yaml +++ b/charts/manager/crds/greenhouse.sap_teams.yaml @@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.0 + controller-gen.kubebuilder.io/version: v0.20.1 name: teams.greenhouse.sap spec: group: greenhouse.sap diff --git a/config/samples/organization/demo.yaml b/config/samples/organization/demo.yaml index c9f091bd4..051ad3796 100644 --- a/config/samples/organization/demo.yaml +++ b/config/samples/organization/demo.yaml @@ -65,3 +65,5 @@ spec: # name: demo-oidc # issuer: https://global.accounts.dev # redirectURI: https://bogus.accounts.foo +# extraConfig: +# userIDClaim: email diff --git a/docs/reference/api/index.html b/docs/reference/api/index.html index c0d619379..d3d181a36 100644 --- a/docs/reference/api/index.html +++ b/docs/reference/api/index.html @@ -2083,6 +2083,63 @@
extraConfigExtraConfig contains additional OIDC configuration for claim mapping and token validation behavior.
++(Appears on: +OIDCConfig) +
+| Field | +Description | +
|---|---|
+insecureSkipEmailVerified+ +bool + + |
+
+ InsecureSkipEmailVerified if set to true, treats email_verified as true when the claim is absent from the ID token. +This does not override an explicit email_verified=false. Only enable for providers that omit the claim entirely (e.g. some Okta, EntraID or CloudFoundry configurations). + |
+
+userIDClaim+ +string + + |
+
+ UserIDClaim is the claim to be used as both user ID and username. +When set, it overrides both UserIDKey and UserNameKey in the dex OIDC connector config. + |
+