Merge pull request #690 from rithujohn191/connector-docs
Documentation: LDAP connector documentation.
This commit is contained in:
		
							
								
								
									
										102
									
								
								Documentation/ldap-connector.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								Documentation/ldap-connector.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| # Authentication through LDAP | ||||
|  | ||||
| ## Overview | ||||
|  | ||||
| The LDAP connector allows email/password based authentication, backed by a LDAP directory. | ||||
|  | ||||
| The connector executes two primary queries: | ||||
|  | ||||
| 1. Finding the user based on the end user's credentials. | ||||
| 2. Searching for groups using the user entry. | ||||
|  | ||||
| ## Configuration | ||||
|  | ||||
| User entries are expected to have an email attribute (configurable through `emailAttr`), and a display name attribute (configurable through `nameAttr`). The following is an example config file that can be used by the LDAP connector to authenticate a user. | ||||
|  | ||||
| ```yaml | ||||
|  | ||||
| connectors: | ||||
| - type: ldap | ||||
|   id: ldap | ||||
|   config: | ||||
|     # Host and optional port of the LDAP server in the form "host:port". | ||||
|     # If the port is not supplied, it will be guessed based on the TLS config. | ||||
|     host: ldap.example.com:636 | ||||
|     # Following field is required if the LDAP host is not using TLS (port 389). | ||||
|     # insecureNoSSL: true | ||||
|     # Path to a trusted root certificate file. Default: use the host's root CA. | ||||
|     rootCA: /etc/dex/ldap.ca | ||||
|     # The DN and password for an application service account. The connector uses | ||||
|     # these credentials to search for users and groups. Not required if the LDAP | ||||
|     # server provides access for anonymous auth. | ||||
|     bindDN: uid=seviceaccount,cn=users,dc=example,dc=com | ||||
|     bindPW: password | ||||
|     # User entry search configuration. | ||||
|     userSearch: | ||||
|       # BaseDN to start the search from. It will translate to the query | ||||
|       # "(&(objectClass=person)(uid=<username>))". | ||||
|       baseDN: cn=users,dc=example,dc=com | ||||
|       # Optional filter to apply when searching the directory. | ||||
|       filter: "(objectClass=person)" | ||||
|       # username attribute used for comparing user entries. This will be translated | ||||
|       # and combined with the other filter as "(<attr>=<username>)". | ||||
|       username: uid | ||||
|       # The following three fields are direct mappings of attributes on the user entry. | ||||
|       # String representation of the user. | ||||
|       idAttr: uid | ||||
|       # Required. Attribute to map to Email. | ||||
|       emailAttr: mail | ||||
|       # Maps to display name of users. No default value. | ||||
|       nameAttr: name | ||||
|     # Group search configuration. | ||||
|     groupSearch: | ||||
|       # BaseDN to start the search from. It will translate to the query | ||||
|       # "(&(objectClass=group)(member=<user uid>))". | ||||
|       baseDN: cn=groups,dc=freeipa,dc=example,dc=com | ||||
|       # Optional filter to apply when searching the directory. | ||||
|       filter: "(objectClass=group)" | ||||
|       # Following two fields are used to match a user to a group. It adds an additional | ||||
|       # requirement to the filter that an attribute in the group must match the user's | ||||
|       # attribute value. | ||||
|       userAttr: uid | ||||
|       groupAttr: member | ||||
|       # Represents group name. | ||||
|       nameAttr: name | ||||
| ``` | ||||
|  | ||||
| The LDAP connector first initializes a connection to the LDAP directory using the `bindDN` and `bindPW`. It then tries to search for the given `username` and bind as that user to verify their password. | ||||
| Searches that return multiple entries are considered ambiguous and will return an error. | ||||
|  | ||||
| ## Example: Searching a FreeIPA server with groups | ||||
|  | ||||
| The following configuration will allow the LDAP connector to search a FreeIPA directory using an LDAP filter. | ||||
|  | ||||
| ```yaml | ||||
|  | ||||
| connectors: | ||||
| - type: ldap | ||||
|   id: ldap | ||||
|   config: | ||||
|     # host and port of the LDAP server in form "host:port". | ||||
|     host: freeipa.example.com:636 | ||||
|     # freeIPA server's CA | ||||
|     rootCA: ca.crt | ||||
|     userSearch: | ||||
|       # Would translate to the query "(&(objectClass=person)(uid=<username>))". | ||||
|       baseDN: cn=users,dc=freeipa,dc=example,dc=com | ||||
|       filter: "(objectClass=posixAccount)" | ||||
|       username: uid | ||||
|       idAttr: uid | ||||
|       # Required. Attribute to map to Email. | ||||
|       emailAttr: mail | ||||
|       # Entity attribute to map to display name of users. | ||||
|     groupSearch: | ||||
|       # Would translate to the query "(&(objectClass=group)(member=<user uid>))". | ||||
|       baseDN: cn=groups,dc=freeipa,dc=example,dc=com | ||||
|       filter: "(objectClass=group)" | ||||
|       userAttr: uid | ||||
|       groupAttr: member | ||||
|       nameAttr: name | ||||
| ``` | ||||
|  | ||||
| If the search finds an entry, it will attempt to use the provided password to bind as that user entry. | ||||
		Reference in New Issue
	
	Block a user