A server such an LDAP server gets an instance of this
class in order to perform authentication defined by a specific SASL
mechanism. Invoking methods on the SaslServer instance
generates challenges according to the SASL
mechanism implemented by the SaslServer.
As the authentication proceeds, the instance
encapsulates the state of a SASL server's authentication exchange.
Here's an example of how an LDAP server might use a SaslServer.
It first gets an instance of a SaslServer for the SASL mechanism
requested by the client:
SaslServer ss = Sasl.createSaslServer(mechanism,
"ldap", myFQDN, props, callbackHandler);
It can then proceed to use the server for authentication.
For example, suppose the LDAP server received an LDAP BIND request
containing the name of the SASL mechanism and an (optional) initial
response. It then might use the server as follows:
while (!ss.isComplete()) { try { byte[] challenge = ss.evaluateResponse(response); if (ss.isComplete()) { status = ldap.sendBindResponse(mechanism, challenge, SUCCESS); } else { status = ldap.sendBindResponse(mechanism, challenge, SASL_BIND_IN_PROGRESS); response = ldap.readBindRequest(); } } catch (SaslException e) { status = ldap.sendErrorResponse(e); break; } } if (ss.isComplete() && status == SUCCESS) { String qop = (String) sc.getNegotiatedProperty(Sasl.QOP); if (qop != null && (qop.equalsIgnoreCase("auth-int") || qop.equalsIgnoreCase("auth-conf"))) { // Use SaslServer.wrap() and SaslServer.unwrap() for future // communication with client ldap.in = new SecureInputStream(ss, ldap.in); ldap.out = new SecureOutputStream(ss, ldap.out); } }
Sasl, SaslServerFactory
| Modifier and Type | Method and Description |
|---|---|
| public void | dispose()
Disposes of any system resources or security-sensitive information the SaslServer might be using. |
| public byte[] | Returns: The possibly null challenge to send to the client. It is null if the authentication has succeeded and there is no more challenge data to be sent to the client.The non-null (but possibly empty) response sent
by the client. response)Evaluates the response data and generates a challenge. |
| public String | Returns: The authorization ID of the client.Reports the authorization ID in effect for the client of this session. |
| public String | Returns: A non-null string representing the IANA-registered mechanism name.Returns the IANA-registered mechanism name of this SASL server. |
| public Object | Returns: The value of the negotiated property. If null, the property was not negotiated or is not applicable to this mechanism.the property propName)Retrieves the negotiated property. |
| public boolean | Returns: true if the authentication exchange has completed; false otherwise.Determines whether the authentication exchange has completed. |
| public byte[] | Returns: A non-null byte array containing the decoded bytes.A non-null byte array containing the encoded bytes
from the client. incoming, int The starting position at offset, int incoming of the bytes to use.The number of bytes from len)incoming to use.Unwraps a byte array received from the client. |
| public byte[] | Returns: A non-null byte array containing the encoded bytes.A non-null byte array containing the bytes to encode. outgoing, int The starting position at offset, int outgoing of the bytes to use.The number of bytes from len)outgoing to use.Wraps a byte array to be sent to the client. |
| dispose | back to summary |
|---|---|
| public void dispose() throws SaslException Disposes of any system resources or security-sensitive information the SaslServer might be using. Invoking this method invalidates the SaslServer instance. This method is idempotent.
| |
| evaluateResponse | back to summary |
|---|---|
| public byte[] evaluateResponse(byte[] response) throws SaslException Evaluates the response data and generates a challenge.
If a response is received from the client during the authentication
process, this method is called to prepare an appropriate next
challenge to submit to the client. The challenge is null if the
authentication has succeeded and no more challenge data is to be sent
to the client. It is non-null if the authentication must be continued
by sending a challenge to the client, or if the authentication has
succeeded but challenge data needs to be processed by the client.
| |
| getAuthorizationID | back to summary |
|---|---|
| public String getAuthorizationID() Reports the authorization ID in effect for the client of this session. This method can only be called if isComplete() returns true.
| |
| getMechanismName | back to summary |
|---|---|
| public String getMechanismName() Returns the IANA-registered mechanism name of this SASL server. (e.g. "CRAM-MD5", "GSSAPI").
| |
| getNegotiatedProperty | back to summary |
|---|---|
| public Object getNegotiatedProperty(String propName) Retrieves the negotiated property.
This method can be called only after the authentication exchange has
completed (i.e., when
The
| |
| isComplete | back to summary |
|---|---|
| public boolean isComplete() Determines whether the authentication exchange has completed.
This method is typically called after each invocation of
| |
| unwrap | back to summary |
|---|---|
| public byte[] unwrap(byte[] incoming, int offset, int len) throws SaslException Unwraps a byte array received from the client.
This method can be called only after the authentication exchange has
completed (i.e., when
| |
| wrap | back to summary |
|---|---|
| public byte[] wrap(byte[] outgoing, int offset, int len) throws SaslException Wraps a byte array to be sent to the client.
This method can be called only after the authentication exchange has
completed (i.e., when
The result of this method
will make up the contents of the SASL buffer as defined in RFC 2222
without the leading four octet field that represents the length.
| |