Top Description Fields Constructors Methods
com.sun.mail.auth

public Class OAuth2SaslClient

extends Object
implements SaslClient
Class Inheritance
All Implemented Interfaces
javax.security.sasl.SaslClient
Imports
java.io.IOException, .UnsupportedEncodingException, java.util.Map, java.security.Provider, .Security, javax.security.sasl.*, javax.security.auth.callback.*, com.sun.mail.util.ASCIIUtility

JavaMail SASL client for OAUTH2.
Author
Bill Shannon
See Also
RFC 6749 - OAuth 2.0 Authorization Framework, RFC 6750 - OAuth 2.0 Authorization Framework: Bearer Token Usage

Field Summary

Modifier and TypeField and Description
private CallbackHandler
private boolean

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public void
dispose()

Implements javax.security.sasl.SaslClient.dispose.

Disposes of any system resources or security-sensitive information the SaslClient might be using.
public byte[]
evaluateChallenge(byte[]
The non-null challenge sent from the server. The challenge array may have zero length.
challenge
)

Implements javax.security.sasl.SaslClient.evaluateChallenge.

Evaluates the challenge data and generates a response.
public String
getMechanismName()

Implements javax.security.sasl.SaslClient.getMechanismName.

Returns the IANA-registered mechanism name of this SASL client.
public Object
getNegotiatedProperty(String
The non-null property name.
propName
)

Implements javax.security.sasl.SaslClient.getNegotiatedProperty.

Retrieves the negotiated property.
public boolean
hasInitialResponse()

Implements javax.security.sasl.SaslClient.hasInitialResponse.

Determines whether this mechanism has an optional initial response.
public boolean
isComplete()

Implements javax.security.sasl.SaslClient.isComplete.

Determines whether the authentication exchange has completed.
public byte[]
unwrap(byte[]
A non-null byte array containing the encoded bytes from the server.
incoming
,
int
The starting position at incoming of the bytes to use.
offset
,
int
The number of bytes from incoming to use.
len
)

Implements javax.security.sasl.SaslClient.unwrap.

Unwraps a byte array received from the server.
public byte[]
wrap(byte[]
A non-null byte array containing the bytes to encode.
outgoing
,
int
The starting position at outgoing of the bytes to use.
offset
,
int
The number of bytes from outgoing to use.
len
)

Implements javax.security.sasl.SaslClient.wrap.

Wraps a byte array to be sent to the server.
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

cbhback to summary
private CallbackHandler cbh
completeback to summary
private boolean complete

Constructor Detail

OAuth2SaslClientback to summary
public OAuth2SaslClient(Map<String, ?> props, CallbackHandler cbh)

Method Detail

disposeback to summary
public void dispose() throws SaslException

Implements javax.security.sasl.SaslClient.dispose.

Doc from javax.security.sasl.SaslClient.dispose.

Disposes of any system resources or security-sensitive information the SaslClient might be using. Invoking this method invalidates the SaslClient instance. This method is idempotent.

Annotations
@Override
Exceptions
SaslException:
If a problem was encountered while disposing the resources.
evaluateChallengeback to summary
public byte[] evaluateChallenge(byte[] challenge) throws SaslException

Implements javax.security.sasl.SaslClient.evaluateChallenge.

Doc from javax.security.sasl.SaslClient.evaluateChallenge.

Evaluates the challenge data and generates a response. If a challenge is received from the server during the authentication process, this method is called to prepare an appropriate next response to submit to the server.

Parameters
challenge:byte[]

The non-null challenge sent from the server. The challenge array may have zero length.

Returns:byte[]

The possibly null response to send to the server. It is null if the challenge accompanied a "SUCCESS" status and the challenge only contains data for the client to update its state and no response needs to be sent to the server. The response is a zero-length byte array if the client is to send a response with no data.

Annotations
@Override
Exceptions
SaslException:
If an error occurred while processing the challenge or generating a response.
getMechanismNameback to summary
public String getMechanismName()

Implements javax.security.sasl.SaslClient.getMechanismName.

Doc from javax.security.sasl.SaslClient.getMechanismName.

Returns the IANA-registered mechanism name of this SASL client. (e.g. "CRAM-MD5", "GSSAPI").

Returns:String

A non-null string representing the IANA-registered mechanism name.

Annotations
@Override
getNegotiatedPropertyback to summary
public Object getNegotiatedProperty(String propName)

Implements javax.security.sasl.SaslClient.getNegotiatedProperty.

Doc from javax.security.sasl.SaslClient.getNegotiatedProperty.

Retrieves the negotiated property. This method can be called only after the authentication exchange has completed (i.e., when isComplete() returns true); otherwise, an IllegalStateException is thrown.

The Sasl class includes several well-known property names (For example, Sasl#QOP). A SASL provider can support other properties which are specific to the vendor and/or a mechanism.

Parameters
propName:String

The non-null property name.

Returns:Object

The value of the negotiated property. If null, the property was not negotiated or is not applicable to this mechanism.

Annotations
@Override
hasInitialResponseback to summary
public boolean hasInitialResponse()

Implements javax.security.sasl.SaslClient.hasInitialResponse.

Doc from javax.security.sasl.SaslClient.hasInitialResponse.

Determines whether this mechanism has an optional initial response. If true, caller should call evaluateChallenge() with an empty array to get the initial response.

Returns:boolean

true if this mechanism has an initial response.

Annotations
@Override
isCompleteback to summary
public boolean isComplete()

Implements javax.security.sasl.SaslClient.isComplete.

Doc from javax.security.sasl.SaslClient.isComplete.

Determines whether the authentication exchange has completed. This method may be called at any time, but typically, it will not be called until the caller has received indication from the server (in a protocol-specific manner) that the exchange has completed.

Returns:boolean

true if the authentication exchange has completed; false otherwise.

Annotations
@Override
unwrapback to summary
public byte[] unwrap(byte[] incoming, int offset, int len) throws SaslException

Implements javax.security.sasl.SaslClient.unwrap.

Doc from javax.security.sasl.SaslClient.unwrap.

Unwraps a byte array received from the server. This method can be called only after the authentication exchange has completed (i.e., when 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.

Parameters
incoming:byte[]

A non-null byte array containing the encoded bytes from the server.

offset:int

The starting position at incoming of the bytes to use.

len:int

The number of bytes from incoming to use.

Returns:byte[]

A non-null byte array containing the decoded bytes.

Annotations
@Override
Exceptions
SaslException:
if incoming cannot be successfully unwrapped.
wrapback to summary
public byte[] wrap(byte[] outgoing, int offset, int len) throws SaslException

Implements javax.security.sasl.SaslClient.wrap.

Doc from javax.security.sasl.SaslClient.wrap.

Wraps a byte array to be sent to the server. This method can be called only after the authentication exchange has completed (i.e., when 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.

Parameters
outgoing:byte[]

A non-null byte array containing the bytes to encode.

offset:int

The starting position at outgoing of the bytes to use.

len:int

The number of bytes from outgoing to use.

Returns:byte[]

A non-null byte array containing the encoded bytes.

Annotations
@Override
Exceptions
SaslException:
if outgoing cannot be successfully wrapped.