Class BindRequest
- All Implemented Interfaces:
ProtocolOp
,Request
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.forgerock.opendj.ldap.messages.Request
Request.RequestType
-
Field Summary
Modifier and TypeFieldDescriptionstatic final byte
The authentication type value (0xA3) reserved for SASL authentication.static final byte
The authentication type value (0x80) reserved for simple authentication.static final String
The name of the SASL mechanism that uses anonymous access and having the name "ANONYMOUS".static final String
The name of the SASL mechanism that uses CRAM-MD5 authentication and having the name "CRAM-MD5".static final String
The name of the SASL mechanism that uses DIGEST-MD5 authentication and having the name "DIGEST-MD5".static final String
The name of the SASL mechanism that uses external authentication and having the name "EXTERNAL".static final String
The name of the SASL mechanism that uses GSS-API authentication and having the name "GSSAPI".static final String
The name of the SASL mechanism that uses PLAIN authentication and having the name "PLAIN".static final String
The name of the SASL mechanism that uses SCRAM-SHA-256 authentication and having the name "SCRAM-SHA-256".static final String
The name of the SASL mechanism that uses SCRAM-SHA-512 authentication and having the name "SCRAM-SHA-512". -
Method Summary
Modifier and TypeMethodDescription<R,
P, E extends Exception>
Raccept
(RequestVisitor<R, P, E> v, P p) Applies aRequestVisitor
to thisRequest
.final BindRequest
addControl
(Control control) Adds the provided control to this protocol-op.final BindRequest
addControls
(Iterable<? extends Control> controls) Adds the provided controls to this protocol-op.final boolean
containsControl
(String oid) Returnstrue
if this protocol-op contains the specified control.void
destroy()
Destroys the credentials contained within this bind request.evaluateSaslChallenge
(byte[] serverSaslCredentials) Evaluates the provided SASL credentials (challenge) returned by the server and creates the next SASL bind request that should be sent to the server in order to continue or complete the SASL authentication sequence.byte
Returns the authentication mechanism identifier for this bind request as defined by the LDAP protocol.byte[]
Returns a defensive copy of the encoded authentication value for this bind request as defined by the LDAP protocol.final <C extends Control>
CgetControl
(ControlDecoder<C> decoder, DecodeOptions options) Decodes and returns the first control in this protocol-op having an OID corresponding to the provided control decoder.Returns aList
containing the controls included with this protocol-op.getName()
Returns the name of the Directory object that the client wishes to bind as.Returns theSaslClient
that will be responsible for continuing the SASL challenge-response sequence as well as potentially installing a SASL security layer once the bind sequence completes, ornull
if a noSaslClient
has been provided.byte[]
Returns a defensive copy of the optional SASL credentials, ornull
if the authentication type is notAUTHENTICATION_TYPE_SASL
or if the SASL credentials are not present.Returns the name of the SASL mechanism, e.g.byte[]
Returns a defensive copy of the simple bind password, ornull
if the authentication type is notAUTHENTICATION_TYPE_SIMPLE
.getType()
Returns the type of this request to avoid expensiveinstanceof
checks.int
Returns the version of the protocol to be used at the LDAP message layer.boolean
Returnstrue
if the SASL bind sequence has negotiated a SASL security layer using Quality of Protection (QOP).boolean
Returntrue
if this bind request's authentication type isAUTHENTICATION_TYPE_SASL
.boolean
Returntrue
if this bind request's authentication type isAUTHENTICATION_TYPE_SIMPLE
.final BindRequest
removeControls
(String oid) Removes all the controls having the specified OID.setAuthenticationTypeAndValue
(byte type, byte[] value) Sets the authentication type and value.Sets the name of the Directory object that the client wishes to bind as.setSaslMechanismAndCredentials
(String mechanism, byte[] credentials) Sets the authentication type toAUTHENTICATION_TYPE_SASL
, the SASL mechanism name, and the optional SASL credentials.setSaslMechanismAndCredentials
(SaslClient saslClient) Configures this bind request for SASL authentication using the providedSaslClient
.setSimplePassword
(byte[] password) Sets the authentication type toAUTHENTICATION_TYPE_SIMPLE
and the authentication value to a copy of the provided password.setVersion
(int version) Sets the version of the protocol to be used at the LDAP message layer.toString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.forgerock.opendj.ldap.messages.ProtocolOp
containsControl, getControl, getControl, getControls
Methods inherited from interface org.forgerock.opendj.ldap.messages.Request
addControl, addControls, removeControls
-
Field Details
-
AUTHENTICATION_TYPE_SIMPLE
public static final byte AUTHENTICATION_TYPE_SIMPLEThe authentication type value (0x80) reserved for simple authentication.- See Also:
-
AUTHENTICATION_TYPE_SASL
public static final byte AUTHENTICATION_TYPE_SASLThe authentication type value (0xA3) reserved for SASL authentication.- See Also:
-
SASL_MECHANISM_NAME_ANONYMOUS
The name of the SASL mechanism that uses anonymous access and having the name "ANONYMOUS".- See Also:
-
SASL_MECHANISM_NAME_CRAM_MD5
The name of the SASL mechanism that uses CRAM-MD5 authentication and having the name "CRAM-MD5".- See Also:
-
SASL_MECHANISM_NAME_DIGEST_MD5
The name of the SASL mechanism that uses DIGEST-MD5 authentication and having the name "DIGEST-MD5".- See Also:
-
SASL_MECHANISM_NAME_PLAIN
The name of the SASL mechanism that uses PLAIN authentication and having the name "PLAIN".- See Also:
-
SASL_MECHANISM_NAME_EXTERNAL
The name of the SASL mechanism that uses external authentication and having the name "EXTERNAL".- See Also:
-
SASL_MECHANISM_NAME_GSSAPI
The name of the SASL mechanism that uses GSS-API authentication and having the name "GSSAPI".- See Also:
-
SASL_MECHANISM_NAME_SCRAM_SHA_256
The name of the SASL mechanism that uses SCRAM-SHA-256 authentication and having the name "SCRAM-SHA-256".- See Also:
-
SASL_MECHANISM_NAME_SCRAM_SHA_512
The name of the SASL mechanism that uses SCRAM-SHA-512 authentication and having the name "SCRAM-SHA-512".- See Also:
-
-
Method Details
-
getVersion
public int getVersion()Returns the version of the protocol to be used at the LDAP message layer. There is no version negotiation. The client sets this field to the version it desires. If the server does not support the specified version then it will respond with a result whose error code isResultCode.PROTOCOL_ERROR
.By default LDAP version 3 will be used which is the most recent LDAP version and the one recommended for all client applications. Furthermore, OpenDJ only has partial support for LDAPv2.
- Returns:
- The version of the protocol to be used at the LDAP message layer.
-
setVersion
Sets the version of the protocol to be used at the LDAP message layer. There is no version negotiation. The client sets this field to the version it desires. If the server does not support the specified version then it will respond with a result whose error code isResultCode.PROTOCOL_ERROR
.By default LDAP version 3 will be used which is the most recent LDAP version and the one recommended for all client applications. Furthermore, OpenDJ only has partial support for LDAPv2.
- Parameters:
version
- The version of the protocol to be used at the LDAP message layer.- Returns:
- This bind request.
- Throws:
IllegalArgumentException
- Ifversion
is less than 1 or greater than 127.UnsupportedOperationException
- If this bind request does not permit the version to be set.
-
getName
Returns the name of the Directory object that the client wishes to bind as. The name may be empty (but nevernull
) when used for anonymous binds, or when using SASL authentication. The server shall not dereference any aliases in locating the named object.The LDAP protocol defines the Bind name to be a distinguished name, however some LDAP implementations have relaxed this constraint and allow other identities to be used, such as the user's email address.
- Returns:
- The name of the Directory object that the client wishes to bind as. May be empty, but cannot be
null
.
-
setName
Sets the name of the Directory object that the client wishes to bind as. The name may be empty (but nevernull
when used for of anonymous binds, or when using SASL authentication. The server shall not dereference any aliases in locating the named object.The LDAP protocol defines the Bind name to be a distinguished name, however some LDAP implementations have relaxed this constraint and allow other identities to be used, such as the user's email address.
- Parameters:
name
- The name of the Directory object that the client wishes to bind as. May be empty, but cannot benull
.- Returns:
- This bind request.
- Throws:
UnsupportedOperationException
- If this bind request does not permit the distinguished name to be set.NullPointerException
- Ifname
wasnull
.
-
getAuthenticationType
public byte getAuthenticationType()Returns the authentication mechanism identifier for this bind request as defined by the LDAP protocol. Note that the valueAUTHENTICATION_TYPE_SIMPLE
(0x80
) is reserved for simple authentication and the valueAUTHENTICATION_TYPE_SASL
(0xA3
) is reserved for SASL authentication.- Returns:
- The authentication mechanism identifier.
-
getAuthenticationValue
public byte[] getAuthenticationValue()Returns a defensive copy of the encoded authentication value for this bind request as defined by the LDAP protocol. For simple authentication the authentication value is the byte representation of the password. For SASL authentication the authentication value is an ASN.1 encoded sequence comprising of the SASL mechanism name and the optional SASL mechanism specific credentials.- Returns:
- A defensive copy of the encoded authentication value for this bind request as defined by the LDAP protocol.
-
accept
Description copied from interface:Request
Applies aRequestVisitor
to thisRequest
.- Specified by:
accept
in interfaceRequest
- Type Parameters:
R
- The return type of the visitor's methods.P
- The type of the additional parameters to the visitor's methods.E
- The type of the exception thrown by the visitor method if it fails, orNeverThrowsException
if the visitor cannot fail.- Parameters:
v
- The request visitor.p
- Optional additional visitor parameter.- Returns:
- A result as specified by the visitor.
- Throws:
E
- If the visitor failed.
-
getSimplePassword
public byte[] getSimplePassword()Returns a defensive copy of the simple bind password, ornull
if the authentication type is notAUTHENTICATION_TYPE_SIMPLE
.- Returns:
- A defensive copy of the simple bind password, or
null
if the authentication type is notAUTHENTICATION_TYPE_SIMPLE
.
-
getSaslMechanism
Returns the name of the SASL mechanism, e.g.SASL_MECHANISM_NAME_PLAIN
, ornull
if the authentication type is notAUTHENTICATION_TYPE_SASL
.- Returns:
- The name of the SASL mechanism, e.g.
SASL_MECHANISM_NAME_PLAIN
, ornull
if the authentication type is notAUTHENTICATION_TYPE_SASL
.
-
getSaslCredentials
public byte[] getSaslCredentials()Returns a defensive copy of the optional SASL credentials, ornull
if the authentication type is notAUTHENTICATION_TYPE_SASL
or if the SASL credentials are not present.- Returns:
- A defensive copy of the optional SASL credentials, or
null
if the authentication type is notAUTHENTICATION_TYPE_SASL
or if the SASL credentials are not present.
-
isSimpleBindRequest
public boolean isSimpleBindRequest()Returntrue
if this bind request's authentication type isAUTHENTICATION_TYPE_SIMPLE
.- Returns:
true
if this bind request's authentication type isAUTHENTICATION_TYPE_SIMPLE
.
-
isSaslBindRequest
public boolean isSaslBindRequest()Returntrue
if this bind request's authentication type isAUTHENTICATION_TYPE_SASL
.- Returns:
true
if this bind request's authentication type isAUTHENTICATION_TYPE_SASL
.
-
setAuthenticationTypeAndValue
Sets the authentication type and value. Iftype
is equal toAUTHENTICATION_TYPE_SIMPLE
then the value will be interpreted as the password. Iftype
is equal toAUTHENTICATION_TYPE_SASL
then the value will be interpreted as the encoded SASL mechanism and credentials. Otherwise, the value will be interpreted as an unrecognized extended authentication value.- Parameters:
type
- The authentication mechanism identifier.value
- The encoded authentication value for this bind request as defined by the LDAP protocol, which may be an empty array but must not benull
. The value will be defensively copied.- Returns:
- This bind request.
- Throws:
IOException
- If the authentication type isAUTHENTICATION_TYPE_SASL
and the value could not be decoded as an encoded SASL mechanism and credentials.UnsupportedOperationException
- If this bind request does not permit the authentication type or value to be set.NullPointerException
- Ifvalue
wasnull
.
-
setSimplePassword
Sets the authentication type toAUTHENTICATION_TYPE_SIMPLE
and the authentication value to a copy of the provided password.- Parameters:
password
- The non-null
simple bind password, which will be defensively copied.- Returns:
- This bind request.
- Throws:
UnsupportedOperationException
- If this bind request does not permit the authentication type or value to be set.NullPointerException
- Ifpassword
wasnull
.
-
setSaslMechanismAndCredentials
Sets the authentication type toAUTHENTICATION_TYPE_SASL
, the SASL mechanism name, and the optional SASL credentials.- Parameters:
mechanism
- The SASL mechanism name, such asSASL_MECHANISM_NAME_PLAIN
.credentials
- The optional SASL credentials which will be defensively copied if provided.- Returns:
- This bind request.
- Throws:
UnsupportedOperationException
- If this bind request does not permit the authentication type or value to be set.NullPointerException
- Ifmechanism
wasnull
.
-
setSaslMechanismAndCredentials
Configures this bind request for SASL authentication using the providedSaslClient
. The authentication type will be set toAUTHENTICATION_TYPE_SASL
, the SASL mechanism name will be obtained from theSaslClient
, and the SASL credentials will be derived from theSaslClient
if it has an initial response, otherwise they will be left undefined.This method should be used if the application is performing SASL authentication and wishes the network layer to drive the complete challenge-response sequence. An application may choose to drive the SASL bind sequence itself, but the application a) will not be able to control where bind requests are sent if load-balancing is active, b) nor will it be able to install a security layer upon completion of the bind sequence if one is negotiated.
- Parameters:
saslClient
- TheSaslClient
that will be responsible for continuing the SASL challenge-response sequence, as well as potentially installing a SASL security layer once the bind sequence completes.- Returns:
- This bind request.
- Throws:
IllegalArgumentException
- If the provided SASL client has not been configured correctly.UnsupportedOperationException
- If this bind request does not permit theSaslClient
to be set.NullPointerException
- IfsaslClient
wasnull
.
-
getSaslClient
Returns theSaslClient
that will be responsible for continuing the SASL challenge-response sequence as well as potentially installing a SASL security layer once the bind sequence completes, ornull
if a noSaslClient
has been provided.A
SaslClient
is only required if the application is performing SASL authentication and wishes the network layer to drive the complete challenge-response sequence. An application may choose to drive the SASL bind sequence itself, but the application:- will not be able to control where bind requests are sent if load-balancing is active,
- nor will it be able to install a security layer upon completion of the bind sequence.
- Returns:
- The
SaslClient
that will be responsible for continuing the SASL challenge-response sequence, as well as potentially installing a SASL security layer once the bind sequence completes, ornull
if none has been provided. - See Also:
-
evaluateSaslChallenge
Evaluates the provided SASL credentials (challenge) returned by the server and creates the next SASL bind request that should be sent to the server in order to continue or complete the SASL authentication sequence. This method may only be called if this request has been configured to use aSaslClient
.- Parameters:
serverSaslCredentials
- The non-null
SASL challenge sent from the server, which may be empty.- Returns:
- The next SASL bind request to be sent to the server, or
null
if the SASL bind sequence has completed. - Throws:
SaslException
- If an error occurred while evaluating the challenge or generating a response.IllegalStateException
- If this bind request has not been configured to use aSaslClient
.NullPointerException
- IfserverSaslCredentials
wasnull
.- See Also:
-
hasNegotiatedSaslQop
public boolean hasNegotiatedSaslQop()Returnstrue
if the SASL bind sequence has negotiated a SASL security layer using Quality of Protection (QOP). This method may only be called if this request has been configured to use aSaslClient
and the SASL bind sequence has completed (the previous call toevaluateSaslChallenge(byte[])
returnednull
).- Returns:
true
if the SASL bind sequence has negotiated a SASL security layer (QOP).- Throws:
IllegalStateException
- If this bind request has not been configured to use aSaslClient
or the SASL bind sequence has not completed.- See Also:
-
destroy
public void destroy()Destroys the credentials contained within this bind request. This method does not dispose theSaslClient
. Instead the underlying network layer will dispose of theSaslClient
when it is no longer in use. This bind request can no longer be used once this method returns. -
getType
Description copied from interface:Request
Returns the type of this request to avoid expensiveinstanceof
checks. -
toString
-
addControl
Description copied from interface:ProtocolOp
Adds the provided control to this protocol-op.- Specified by:
addControl
in interfaceProtocolOp
- Parameters:
control
- The control to be added to this protocol-op.- Returns:
- This protocol-op.
-
addControls
Description copied from interface:ProtocolOp
Adds the provided controls to this protocol-op.- Specified by:
addControls
in interfaceProtocolOp
- Parameters:
controls
- The controls to be added to this protocol-op.- Returns:
- This protocol-op.
-
removeControls
Description copied from interface:ProtocolOp
Removes all the controls having the specified OID.- Specified by:
removeControls
in interfaceProtocolOp
- Parameters:
oid
- The numeric OID of the protocol-op control to remove.- Returns:
- This protocol-op.
-
containsControl
Description copied from interface:ProtocolOp
Returnstrue
if this protocol-op contains the specified control.- Specified by:
containsControl
in interfaceProtocolOp
- Parameters:
oid
- The numeric OID of the protocol-op control.- Returns:
true
if this protocol-op contains the specified control.
-
getControl
public final <C extends Control> C getControl(ControlDecoder<C> decoder, DecodeOptions options) throws DecodeException Description copied from interface:ProtocolOp
Decodes and returns the first control in this protocol-op having an OID corresponding to the provided control decoder.- Specified by:
getControl
in interfaceProtocolOp
- Type Parameters:
C
- The type of control to be decoded and returned.- Parameters:
decoder
- The control decoder.options
- The set of decode options which should be used when decoding the control.- Returns:
- The decoded control, or
null
if the control is not included with this protocol-op. - Throws:
DecodeException
- If the control could not be decoded because it was malformed in some way (e.g. the control value was missing, or its content could not be decoded).
-
getControls
Description copied from interface:ProtocolOp
Returns aList
containing the controls included with this protocol-op. The returnedList
may be modified if permitted by this protocol-op.- Specified by:
getControls
in interfaceProtocolOp
- Returns:
- A
List
containing the controls.
-