|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
Performs SASL authentication as a server.
A server such as 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 corresponding to the SASL mechanism implemented by
the SaslServer instance.
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
instance.
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| Method Summary | |
void |
dispose()
Disposes of any system resources or security-sensitive information the SaslServer might be using. |
byte[] |
evaluateResponse(byte[] response)
Evaluates the response data and generates a challenge. |
String |
getAuthorizationID()
Reports the authorization ID in effect for the client of this session This method can only be called if isComplete() returns true |
String |
getMechanismName()
Returns the IANA-registered mechanism name of this SASL server (e.g. |
Object |
getNegotiatedProperty(String propName)
Retrieves the negotiated property. |
boolean |
isComplete()
Determines if the authentication exchange has completed. |
byte[] |
unwrap(byte[] incoming,
int offset,
int len)
Unwraps a byte array received from the client. |
byte[] |
wrap(byte[] outgoing,
int offset,
int len)
Wraps a byte array to be sent to the client. |
| Method Detail |
public String getMechanismName()
public byte[] evaluateResponse(byte[] response)
throws SaslException
isComplete() should be called after each call to
evaluateResponse(),to determine if any further
response is needed from the client.
response - The non-null (but possibly empty) response sent
by the client
SaslException - if an error occurred while processing
the response or generating a challengepublic boolean isComplete()
evaluateResponse() to determine whether the
authentication has completed successfully or should be continued.
true if the authentication exchange has
completed; false otherwise.public String getAuthorizationID()
true
IllegalStateException - if this authentication
session has not completed
public byte[] unwrap(byte[] incoming,
int offset,
int len)
throws SaslException
isComplete() returns true) and only if
the authentication exchange has negotiated integrity and/or privacy
as the quality of protection; otherwise, an
IllegalStateException is thrown.
incoming is the contents of the SASL buffer as defined in
RFC 2222 without the leading four octet field that represents the length.
offset and len specify the portion of
incoming to use.
incoming - A non-null byte array containing the encoded bytes
from the clientoffset - The starting position at incoming of the
bytes to uselen - The number of bytes from incoming to use
SaslException - if incoming cannot be successfully
unwrapped
IllegalStateException - if the authentication exchange has
not completed, or if the negotiated quality of protection
has neither integrity nor privacy
public byte[] wrap(byte[] outgoing,
int offset,
int len)
throws SaslException
isComplete() returns true) and
only if the authentication exchange has negotiated integrity and/or
privacy as the quality of protection; otherwise, an
IllegalStateException is thrown.
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.
offset and len specify the portion of
outgoing to use.
outgoing - A non-null byte array containing the bytes to encodeoffset - The starting position at outgoing of the
bytes to uselen - The number of bytes from outgoing to use
SaslException - if outgoing cannot be successfully
wrapped.
IllegalStateException - if the authentication exchange has
not completed, or if the negotiated quality of protection
has neither integrity nor privacy.public Object getNegotiatedProperty(String propName)
isComplete() returns true);
otherwise, an IllegalStateException is thrown.
IllegalStateException - if this authentication exchange has
not completed
public void dispose()
throws SaslException
SaslException - if a problem was encountered while disposing
of the resources.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||