diff --git a/builtin/credential/ldap/backend_test.go b/builtin/credential/ldap/backend_test.go index 415e7edf9fba0..920415e0d1dcb 100644 --- a/builtin/credential/ldap/backend_test.go +++ b/builtin/credential/ldap/backend_test.go @@ -1002,6 +1002,7 @@ func TestLdapAuthBackend_ConfigUpgrade(t *testing.T) { CaseSensitiveNames: falseBool, UsePre111GroupCNBehavior: new(bool), RequestTimeout: cfg.RequestTimeout, + UsernameAsAlias: false, }, } diff --git a/builtin/credential/ldap/path_login.go b/builtin/credential/ldap/path_login.go index 41d66d04e3a0c..cc805a29ba5e4 100644 --- a/builtin/credential/ldap/path_login.go +++ b/builtin/credential/ldap/path_login.go @@ -100,6 +100,10 @@ func (b *backend) pathLogin(ctx context.Context, req *logical.Request, d *framew }, } + if cfg.UsernameAsAlias { + auth.Alias.Name = username + } + cfg.PopulateTokenAuth(auth) // Add in configured policies from mappings diff --git a/changelog/14324.txt b/changelog/14324.txt new file mode 100644 index 0000000000000..2932b2323cd10 --- /dev/null +++ b/changelog/14324.txt @@ -0,0 +1,3 @@ +```release-note:improvement +auth/ldap: Add username_as_alias configurable to change how aliases are named +``` diff --git a/sdk/helper/ldaputil/config.go b/sdk/helper/ldaputil/config.go index d4b21c8b82245..4e108374763b0 100644 --- a/sdk/helper/ldaputil/config.go +++ b/sdk/helper/ldaputil/config.go @@ -101,6 +101,12 @@ Default: cn`, }, }, + "username_as_alias": { + Type: framework.TypeBool, + Default: false, + Description: "If true, sets the alias name to the username", + }, + "userattr": { Type: framework.TypeString, Default: "cn", @@ -231,6 +237,10 @@ func NewConfigEntry(existing *ConfigEntry, d *framework.FieldData) (*ConfigEntry cfg.AnonymousGroupSearch = d.Get("anonymous_group_search").(bool) } + if _, ok := d.Raw["username_as_alias"]; ok || !hadExisting { + cfg.UsernameAsAlias = d.Get("username_as_alias").(bool) + } + if _, ok := d.Raw["url"]; ok || !hadExisting { cfg.Url = strings.ToLower(d.Get("url").(string)) } @@ -369,6 +379,7 @@ type ConfigEntry struct { GroupFilter string `json:"groupfilter"` GroupAttr string `json:"groupattr"` UPNDomain string `json:"upndomain"` + UsernameAsAlias bool `json:"username_as_alias"` UserAttr string `json:"userattr"` Certificate string `json:"certificate"` ClientTLSCert string `json:"client_tls_cert` @@ -418,6 +429,7 @@ func (c *ConfigEntry) PasswordlessMap() map[string]interface{} { "use_token_groups": c.UseTokenGroups, "anonymous_group_search": c.AnonymousGroupSearch, "request_timeout": c.RequestTimeout, + "username_as_alias": c.UsernameAsAlias, } if c.CaseSensitiveNames != nil { m["case_sensitive_names"] = *c.CaseSensitiveNames diff --git a/sdk/helper/ldaputil/config_test.go b/sdk/helper/ldaputil/config_test.go index 21a552b9ffbc8..20e2037accc8a 100644 --- a/sdk/helper/ldaputil/config_test.go +++ b/sdk/helper/ldaputil/config_test.go @@ -163,6 +163,7 @@ var jsonConfigDefault = []byte(` "tls_max_version": "tls12", "use_token_groups": false, "use_pre111_group_cn_behavior": null, + "username_as_alias": false, "request_timeout": 90, "case_sensitive_names": false } diff --git a/website/content/api-docs/auth/ldap.mdx b/website/content/api-docs/auth/ldap.mdx index 20e6bd8c99039..f64bb933020f3 100644 --- a/website/content/api-docs/auth/ldap.mdx +++ b/website/content/api-docs/auth/ldap.mdx @@ -83,6 +83,8 @@ This endpoint configures the LDAP auth method. `groupfilter` in order to enumerate user group membership. Examples: for groupfilter queries returning _group_ objects, use: `cn`. For queries returning _user_ objects, use: `memberOf`. The default is `cn`. +- `username_as_alias` `(bool: false)` - If set to true, forces the auth method + to use the username passed by the user as the alias name. @include 'tokenfields.mdx' @@ -111,6 +113,7 @@ $ curl \ "tls_max_version": "tls12", "tls_min_version": "tls12", "url": "ldaps://ldap.myorg.com:636", + "username_as_alias": false, "userattr": "samaccountname", "userdn": "ou=Users,dc=example,dc=com" } @@ -154,6 +157,7 @@ $ curl \ "tls_min_version": "tls12", "upndomain": "", "url": "ldaps://ldap.myorg.com:636", + "username_as_alias": false, "userattr": "samaccountname", "userdn": "ou=Users,dc=example,dc=com" }, diff --git a/website/content/docs/auth/ldap.mdx b/website/content/docs/auth/ldap.mdx index e364c02f13a5a..a40cfb5ba5f71 100644 --- a/website/content/docs/auth/ldap.mdx +++ b/website/content/docs/auth/ldap.mdx @@ -141,6 +141,11 @@ _Note_: When using _Authenticated Search_ for binding parameters (see above) the Use `vault path-help` for more details. +### Other + +- `username_as_alias` (bool, optional) - If set to true, forces the auth method to use the username passed by the user as the alias name. + + ## Examples: ### Scenario 1