Browse Source

added additional config docs

Daniel Moore 11 years ago
parent
commit
1c27f1aaec
1 changed files with 102 additions and 1 deletions
  1. 102 1
      README.md

+ 102 - 1
README.md

@@ -43,4 +43,105 @@ cp -n priv/local.d/* /usr/local/etc/couchdb/local.d/
 
 ## Configuration
 
-See [ldap_auth.ini] (priv/local.d/ldap_auth.ini) for details.
+### Authentication Handlers
+
+The defaults included in `ldap_auth.ini` provide a basic, out-of-the-box
+configuration for sessions, cookies, basic authentication, and system admin
+role assignment based on LDAP. 
+
+If you have a custom configuration of CouchDB, you may need to edit it.
+
+Keep in mind that the first handler to authenticate a credential "wins."
+Specifically, this means that if you keep the built-in 
+`{couch_httpd_auth, default_authentication_handler}`, CouchDB will continue
+to inspect the `_users` database for credentials and use the ini files
+for system admins.
+
+#### Basic Auth
+
+To allow requests with the users' names and passwords encoded in the URL,
+simply include ` {ldap_auth, handle_basic_auth_req}` in the
+`authentication_handlers`:
+
+[httpd]
+    authentication_handlers = {ldap_auth, handle_basic_auth_req}
+
+#### Sessions and Cookies
+
+In order for session management and cookies to work, you need a few options set.
+
+The first binds the `/_session` REST endpoint to the LDAP session manager.
+
+```ini
+[httpd_global_handlers]
+    _session = {ldap_auth, handle_session_req}
+```
+
+The session manager will authenticate the POST payload credentials and provide
+a cookie token.
+
+In order to use the cookie token, the CouchDB built-in cookie handler must be
+included in the list of authentication handlers:
+
+[httpd]
+    authentication_handlers = {couch_httpd_auth, cookie_authentication_handler}
+
+Each time `handle_session_req` is called, the `_users` database is updated
+with the user's roles. If the user document does not exist beforehand, a new one
+is created; the user's password is not stored.
+
+#### System Admin Delegation
+
+If you'd like to use LDAP to also control the list of system administrators, 
+rather than the CouchDB built-in list in .ini files, you can add 
+`{ldap_auth, handle_admin_role}` to the end of the `authentication_handlers`
+list.
+
+### Options
+
+#### UseSSL
+
+Set to `true` to use SSL to bind to the LDAP server. Default: `false`
+
+#### LdapServer
+
+The LDAP server to use for searches and authentication.
+
+#### BaseDN
+
+The distinguished name to constrain the scope of which users may authenticate.
+This may be as broad (the entire domain) or narrow (an OU or even a group) as
+needed.
+
+#### SearchUserDN and SearchUserPassword
+
+In order to authenticate users by an arbitrary attribute (like username) instead
+of a distinguished name, a service user must be available with permission to
+query LDAP (no other permissions are needed). Some LDAP servers provide anonymous
+querying, but this is not recommended by LDAP vendors. 
+
+The SearchUserDN and SearchUserPassword should be set to the credentials of the
+desired service user. If anonymous queries are allowed and preferred, the DN
+must be set to the anon DN, but the password may remain blank.
+
+#### UserDNMapAttr
+
+The attribute to use as the login name for CouchDB. On Active Directory, you 
+might use:
+
+- `sAMAccountName`, e.g. jsmith
+- `userPrincipalName`, e.g. jsmith@example.com<br/>
+  NOTE: if you use userPrincipalName, be sure to URL-encode the username when using basic auth.<br/>
+  e.g. `http://jsmith%40example.com:password@example.com:5984`
+
+Any attribute could be used, though.
+
+#### GroupDNMapAttr
+
+The same as UserDNMapAttr, but for groups. Most LDAP software has a `name`
+attribute on group objects.
+
+#### SystemAdminRoleName
+
+If you're using system admin delegation, this is the name of the role that will
+be promoted to `_admin`, aka the system admin.