diff --git a/connector/oidc/oidc.go b/connector/oidc/oidc.go
index ca28a98846d334c05abbcf40dbb44d9bbd806324..04df3715cd208570b6a63e6d453bffb8520dc34d 100644
--- a/connector/oidc/oidc.go
+++ b/connector/oidc/oidc.go
@@ -56,14 +56,15 @@ type Config struct {
 	// PromptType will be used fot the prompt parameter (when offline_access, by default prompt=consent)
 	PromptType string `json:"promptType"`
 
+	// OverrideClaimMapping will be used to override the options defined in claimMappings.
+	// i.e. if there are 'email' and `preferred_email` claims available, by default Dex will always use the `email` claim independent of the ClaimMapping.EmailKey.
+	// This setting allows you to override the default behavior of Dex and enforce the mappings defined in `claimMapping`.
+	OverrideClaimMapping bool `json:"overrideClaimMapping"` // defaults to false
+
 	ClaimMapping ClaimMapping `json:"claimMapping"`
 }
 
 type ClaimMapping struct {
-	// Enforce the ClaimMapping.
-	// i.e. an 'email' claim will always be taken if available,
-	// irrelevant of the settings in EmailKey. This option will enforce the ClaimMapping options independent of the existing claims.
-	Enforce bool `json:"enforce"` // defaults to false
 
 	// Configurable key which contains the preferred username claims
 	PreferredUsernameKey string `json:"preferred_username"` // defaults to "preferred_username"
@@ -160,6 +161,7 @@ func (c *Config) Open(id string, logger log.Logger) (conn connector.Connector, e
 		promptType:                c.PromptType,
 		userIDKey:                 c.UserIDKey,
 		userNameKey:               c.UserNameKey,
+		overrideClaimMapping:      c.OverrideClaimMapping,
 		claimMapping:              c.ClaimMapping,
 	}, nil
 }
@@ -183,6 +185,7 @@ type oidcConnector struct {
 	promptType                string
 	userIDKey                 string
 	userNameKey               string
+	overrideClaimMapping      bool
 	claimMapping              ClaimMapping
 }
 
@@ -293,7 +296,7 @@ func (c *oidcConnector) createIdentity(ctx context.Context, identity connector.I
 
 	prefUsername := "preferred_username"
 	preferredUsername, found := claims[prefUsername].(string)
-	if (!found || c.claimMapping.Enforce) && c.claimMapping.PreferredUsernameKey != "" {
+	if (!found || c.overrideClaimMapping) && c.claimMapping.PreferredUsernameKey != "" {
 		prefUsername = c.claimMapping.PreferredUsernameKey
 		preferredUsername, found = claims[prefUsername].(string)
 		if !found {
@@ -312,7 +315,7 @@ func (c *oidcConnector) createIdentity(ctx context.Context, identity connector.I
 	var email string
 	emailKey := "email"
 	email, found = claims[emailKey].(string)
-	if (!found || c.claimMapping.Enforce) && c.claimMapping.EmailKey != "" {
+	if (!found || c.overrideClaimMapping) && c.claimMapping.EmailKey != "" {
 		emailKey = c.claimMapping.EmailKey
 		email, found = claims[emailKey].(string)
 		if !found {
@@ -337,7 +340,7 @@ func (c *oidcConnector) createIdentity(ctx context.Context, identity connector.I
 	if c.insecureEnableGroups {
 		groupsKey := "groups"
 		vs, found := claims[groupsKey].([]interface{})
-		if (!found || c.claimMapping.Enforce) && c.claimMapping.GroupsKey != "" {
+		if (!found || c.overrideClaimMapping) && c.claimMapping.GroupsKey != "" {
 			groupsKey = c.claimMapping.GroupsKey
 			vs, found = claims[groupsKey].([]interface{})
 		}
diff --git a/connector/oidc/oidc_test.go b/connector/oidc/oidc_test.go
index 6bc89645dd4cb72f227c28c447240a30efe79a76..267c0fcf4753b68a02352faf1f81820d40d14b14 100644
--- a/connector/oidc/oidc_test.go
+++ b/connector/oidc/oidc_test.go
@@ -49,6 +49,7 @@ func TestHandleCallback(t *testing.T) {
 		name                      string
 		userIDKey                 string
 		userNameKey               string
+		overrideClaimMapping      bool
 		claimMapping              ClaimMapping
 		insecureSkipEmailVerified bool
 		scopes                    []string
@@ -93,11 +94,11 @@ func TestHandleCallback(t *testing.T) {
 			},
 		},
 		{
-			name:        "enforceCustomEmailClaim",
-			userIDKey:   "", // not configured
-			userNameKey: "", // not configured
+			name:                 "overrideWithCustomEmailClaim",
+			userIDKey:            "", // not configured
+			userNameKey:          "", // not configured
+			overrideClaimMapping: true,
 			claimMapping: ClaimMapping{
-				Enforce:  true,
 				EmailKey: "custommail",
 			},
 			expectUserID:       "subvalue",
@@ -260,9 +261,9 @@ func TestHandleCallback(t *testing.T) {
 			},
 		},
 		{
-			name: "customGroupsKeyButGroupsProvidedButEnforced",
+			name:                 "customGroupsKeyButGroupsProvidedButOverride",
+			overrideClaimMapping: true,
 			claimMapping: ClaimMapping{
-				Enforce:   true,
 				GroupsKey: "cognito:groups",
 			},
 			expectUserID:              "subvalue",
@@ -309,6 +310,7 @@ func TestHandleCallback(t *testing.T) {
 				InsecureSkipEmailVerified: tc.insecureSkipEmailVerified,
 				InsecureEnableGroups:      true,
 				BasicAuthUnsupported:      &basicAuth,
+				OverrideClaimMapping:      tc.overrideClaimMapping,
 			}
 			config.ClaimMapping = tc.claimMapping