The directory realm supports a variety of approaches to using
LDAP for authentication:
A rich set of additional attributes lets you configure the
required behaviour as well as the connection to the underlying
directory and the element and attribute names used to retrieve
information from the directory:
|
Attribute
|
Description
|
|---|
adCompat |
Microsoft Active Directory often returns referrals.
When iterating over NamingEnumerations these lead to
PartialResultExceptions. If you want us to ignore those exceptions,
set this attribute to "true". Unfortunately there's no stable way
to detect, if the Exceptions really come from an AD referral.
The default value is "false".
|
allRolesMode |
This attribute controls how the special role name * is
handled when processing authorization constraints in web.xml. By
default, the specification compliant value of strict is
used which means that the user must be assigned one of the roles defined
in web.xml. The alternative values are authOnly which means
that the user must be authenticated but no check is made for assigned
roles and strictAuthOnly which means that the user must be
authenticated and no check will be made for assigned roles unless roles
are defined in web.xml in which case the user must be assigned at least
one of those roles.
|
alternateURL |
If a socket connection cannot be made to the provider at
the connectionURL an attempt will be made to use the
alternateURL.
|
authentication |
A string specifying the type of authentication to use. "none",
"simple", "strong" or a provider specific definition can be used. If the
provider specific mechanism "GSSAPI" is specified and supported by the
provider, there are some circumstances, such as handling calls to
HttpServletRequest.login(String username, String password),
where "GSSAPI" will not be used and the user will be
authenticated as described in userPassword. If no value is
given, the providers default is used.
|
cipherSuites |
Specify which cipher suites are allowed when trying to open
a secured connection using StartTLS. The allowed cipher suites
are specified by a comma separated list. The default is to use the
cipher suites of the JVM.
|
commonRole |
A role name assigned to each successfully authenticated user in
addition to the roles retrieved from LDAP. If not specified, only
the roles retrieved via LDAP are used.
|
connectionName |
The directory username to use when establishing a
connection to the directory for LDAP search operations. If not
specified an anonymous connection is made, which is often
sufficient unless you specify the userPassword
property.
|
connectionPassword |
The directory password to use when establishing a
connection to the directory for LDAP search operations. If not
specified an anonymous connection is made, which is often
sufficient unless you specify the userPassword
property.
|
connectionPoolSize |
The JNDI realm can use a pool of connections to the directory server
to avoid blocking on a single connection. This attribute value is the
maximum pool size. If not specified, it will use 1, which
means a single connection will be used.
|
connectionTimeout |
The timeout in milliseconds to use when establishing the connection
to the LDAP directory. If not specified, a value of 5000 (5 seconds) is
used.
|
connectionURL |
The connection URL to be passed to the JNDI driver when
establishing a connection to the directory.
|
contextFactory |
Fully qualified Java class name of the factory class used
to acquire our JNDI InitialContext. By default,
assumes that the standard JNDI LDAP provider will be utilized.
|
derefAliases |
A string specifying how aliases are to be dereferenced during
search operations. The allowed values are "always", "never",
"finding" and "searching". If not specified, "always" is used.
|
forceDnHexEscape |
A setting of true forces escaping in the String
representation of a distinguished name to use the \nn form.
This may avoid issues with realms using Active Directory which appears
to be more tolerant of optional escaping when the \nn form
is used. If not specified, the default of false will be
used.
|
hostnameVerifierClassName |
The name of the class to use for hostname verification when
using StartTLS for securing the connection to the ldap server.
The default constructor will be used to construct an instance of
the verifier class. The default is to accept only those hostnames,
that are valid according to the peer certificate of the ldap
server.
|
protocol |
A string specifying the TLS protocol to use. If not given, the
Java runtime's default is used.
|
readTimeout |
The timeout, in milliseconds, to use when trying to read from a
connection to the directory. If not specified, the default of 5000
(5 seconds) is used.
|
referrals |
How do we handle JNDI referrals? Allowed values are
"ignore", "follow", or "throw" (see javax.naming.Context.REFERRAL
for more information).
Microsoft Active Directory often returns referrals.
If you need to follow them set referrals to "follow".
Caution: if your DNS is not part of AD, the LDAP client lib might try
to resolve your domain name in DNS to find another LDAP server.
|
roleBase |
The base directory entry for performing role searches. If not
specified the top-level element in the directory context will be used.
If specified it may optionally include pattern replacements
"{0}".."{n}" corresponding to the name parts of the
user's distinguished name (as returned by
javax.naming.Name.get()).
|
roleName |
The name of the attribute that contains role names in the
directory entries found by a role search. In addition you can
use the userRoleName property to specify the name
of an attribute, in the user's entry, containing additional
role names.
If roleName is not specified a role
search does not take place, and roles are taken only from the
user's entry.
|
roleNested |
Set to true if you want to nest roles into roles.
When a role search is performed and the value of this property is
true, the search will be repeated recursively to find
all the roles that belong to the user either directly or indirectly.
If not specified, the default value of false is used.
|
roleSearch |
The LDAP filter expression used for performing role
searches.
Use {0} to substitute the distinguished name (DN)
of the user, and/or {1} to substitute the username,
and/or {2} for the value of an attribute from the
user's directory entry, of the authenticated user.
The name of the attribute that provides the value for {2}
is configured by the userRoleAttribute property.
When roleNested property is true,
this filter expression will be also used to recursively search for
other roles, which indirectly belong to this user. To find the
roles that match the newly found role, the following values
are used:
{0} is substituted by the distinguished name of the newly
found role, and both {1} and {2} are
substituted by the name of the role (see the roleName
property). The userRoleAttribute property is not
applicable to this search.
If this property is not specified, a role search does not take
place and roles are taken only from the attribute in the user's entry
specified by the userRoleName property.
|
roleSearchAsUser |
When searching for user roles, should the search be performed as the
user currently being authenticated? If false,
connectionName and connectionPassword will be
used if specified, else an anonymous. If not specified, the default
value of false is used. Note that when accessing the
directory using delegated credentials, this attribute is always ignored
and the search is performed using the delegated credentials.
|
roleSubtree |
Set to true if you want to search the entire
subtree of the element specified by the roleBase
property for role entries associated with the user. The
default value of false causes only the top level
to be searched.
|
sizeLimit |
Specifies the maximum number of records to return when using the
userSearch attribute. If not specified, the default of
0 is used which indicates no limit.
|
spnegoDelegationQop |
When the JNDI Realm is used with the SPNEGO authenticator and
useDelegatedCredential is true this attribute
controls the QOP (Quality of Protection) that should be used for
the connection to the LDAP
server after authentication. This value is used to set the
javax.security.sasl.qop environment property for the LDAP
connection. This attribute should be a comma-separated list of values
selected from auth-conf, auth-int and
auth. See Java documentation for more details.
The default value is auth-conf.
|
sslProtocol |
Specifies which ssl protocol should be used, when connecting with
StartTLS. The default is to let the jre decide. If you need even more
control, you can specify the SSLSocketFactory to use.
|
sslSocketFactory |
Specifies which SSLSocketFactory to use when connecting
to the ldap server using StartTLS. An instance of the class will be
constructed using the default constructor. If none class name is given
the default jre SSLSocketFactory will be used.
|
stripRealmForGss |
When processing users authenticated via the GSS-API, this attribute
controls if any "@..." is removed from the end of the user
name. If not specified, the default is true.
|
timeLimit |
Specifies the time (in milliseconds) to wait for records to be
returned when using the userSearch attribute. If not
specified, the default of 0 is used which indicates no
limit.
|
transportGuaranteeRedirectStatus |
The HTTP status code to use when the container needs to issue an HTTP
redirect to meet the requirements of a configured transport
guarantee. The provided status code is not validated. If not
specified, the default value of 302 is used.
|
useContextClassLoader |
Instructs JNDIRealm to use the context class loader when opening the
connection for the JNDI provider. The default value is
true. To load classes using the container's classloader,
specify false.
|
useDelegatedCredential |
When the JNDIRealm is used with the SPNEGO authenticator, delegated
credentials for the user may be available. If such credentials are
present, this attribute controls whether or not they are used to
connect to the directory. If delegated credentials are present but not
used because this attribute is false, the behaviour will be
as described in roleSearchAsUser, userPattern
and userSearchAsUser when delegated credentials are not
used. If not specified, the default value of true is
used.
|
userBase |
The base element for user searches performed using the
userSearch expression. Not used if you are using
the userPattern expression.
|
userPassword |
Name of the attribute in the user's entry containing the
user's password. If you specify this value, JNDIRealm will
bind to the directory using the values specified by
connectionName and
connectionPassword properties, and retrieve the
corresponding attribute for comparison to the value specified
by the user being authenticated. If you do
not specify this value, JNDIRealm will
attempt a simple bind to the directory using the DN of the
user's entry and the password presented by the user, with a
successful bind being interpreted as an authenticated
user.
|
userPattern |
Pattern for the distinguished name (DN) of the user's
directory entry, with {0} marking where the
actual username should be inserted. You can use this property
instead of userSearch, userSubtree
and userBase when the distinguished name contains
the username and is otherwise the same for all users. Note that
when accessing the directory using delegated credentials, this
attribute is always ignored and userSearch,
userSubtree and userBase are always
used instead.
|
userRoleName |
The name of an attribute in the user's directory entry
containing zero or more values for the names of roles assigned
to this user. In addition you can use the
roleName property to specify the name of an
attribute to be retrieved from individual role entries found
by searching the directory. If userRoleName is
not specified all the roles for a user derive from the role
search.
|
userRoleAttribute |
The name of an attribute in the user's directory entry
containing the value that you wish to use when you search for
roles. This is especially useful for RFC 2307 where
the role memberUid can be the uid or the
uidNumber of the user. This value will be
marked as {2} in your role search filter expression.
This value will NOT be available for nested role searches.
|
userSearch |
The LDAP filter expression to use when searching for a
user's directory entry, with {0} marking where
the actual username should be inserted. Use this property
(along with the userBase and
userSubtree properties) instead of
userPattern to search the directory for the
user's entry.
|
userSearchAsUser |
When searching for a user's entry, should the search be performed as
the user currently being authenticated? If false,
connectionName and connectionPassword will be
used if specified, else an anonymous. If not specified, the default
value of false is used. Note that when accessing the
directory using delegated credentials, this attribute is always ignored
and the search is performed using the delegated credentials.
|
userSubtree |
Set to true if you want to search the entire
subtree of the element specified by the userBase
property for the user's entry. The default value of
false causes only the top level to be searched.
Not used if you are using the userPattern
expression.
|
useStartTls |
Set to true if you want to use StartTLS for securing
the connection to the ldap server. The default value is false.
|
X509UsernameRetrieverClassName |
When using X509 client certificates, this specifies the class name
that will be used to retrieve the user name from the certificate.
The class must implement the
org.apache.catalina.realm.X509UsernameRetriever
interface. The default is to use the certificate's SubjectDN
as the username.
|