GSSName, GSSCredential, and GSSContext. It also has methods to query for the list
of available mechanisms and the nametypes that each mechanism
supports.
An instance of the default GSSManager subclass
may be obtained through the static method getInstance, but applications are free to instantiate other subclasses
of GSSManager. The default GSSManager instance
will support the Kerberos v5 GSS-API mechanism in addition to any
others. This mechanism is identified by the Oid "1.2.840.113554.1.2.2"
and is defined in RFC 1964.
A subclass extending the GSSManager abstract class may be
implemented as a modular provider based layer that utilizes some well
known service provider specification. The GSSManager API
allows the application to set provider preferences on
such an implementation. These methods also allow the implementation to
throw a well-defined exception in case provider based configuration is
not supported. Applications that expect to be portable should be aware
of this and recover cleanly by catching the exception.
It is envisioned that there will be three most common ways in which providers will be used:
The GSSManager class has two methods that enable these modes of
usage: addProviderAtFront and
addProviderAtEnd. These methods
have the effect of creating an ordered list of <provider,
oid> pairs where each pair indicates a preference of provider
for a given oid.
It is important to note that there are certain interactions
between the different GSS-API objects that are created by a
GSSManager, where the provider that is used for a particular mechanism
might need to be consistent across all objects. For instance, if a
GSSCredential contains elements from a provider p for a mechanism
m, it should generally be passed in to a GSSContext that will use
provider p for the mechanism m. A simple rule of thumb
that will maximize portability is that objects created from different
GSSManager's should not be mixed, and if possible, a different
GSSManager instance should be created if the application wants to invoke
the addProviderAtFront method on a GSSManager that has
already created an object.
Here is some sample code showing how the GSSManager might be used:
GSSManager manager = GSSManager.getInstance();
Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2");
Oid krb5PrincipalNameType = new Oid("1.2.840.113554.1.2.2.1");
// Identify who the client wishes to be
GSSName userName = manager.createName("duke", GSSName.NT_USER_NAME);
// Identify the name of the server. This uses a Kerberos specific
// name format.
GSSName serverName = manager.createName("nfs/foo.sun.com",
krb5PrincipalNameType);
// Acquire credentials for the user
GSSCredential userCreds = manager.createCredential(userName,
GSSCredential.DEFAULT_LIFETIME,
krb5Mechanism,
GSSCredential.INITIATE_ONLY);
// Instantiate and initialize a security context that will be
// established with the server
GSSContext context = manager.createContext(serverName,
krb5Mechanism,
userCreds,
GSSContext.DEFAULT_LIFETIME);
The server side might use the following variation of this source:
// Acquire credentials for the server
GSSCredential serverCreds = manager.createCredential(serverName,
GSSCredential.DEFAULT_LIFETIME,
krb5Mechanism,
GSSCredential.ACCEPT_ONLY);
// Instantiate and initialize a security context that will
// wait for an establishment request token from the client
GSSContext context = manager.createContext(serverCreds);
GSSName, GSSCredential, GSSContext
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public abstract void | addProviderAtEnd(Provider
the provider instance that should be used whenever support
is needed for mech. p, Oid the mechanism for which the provider is being set mech)This method is used to indicate to the GSSManager that the application would like a particular provider to be used if no other provider can be found that supports the given mechanism. |
| public abstract void | addProviderAtFront(Provider
the provider instance that should be used whenever support
is needed for mech. p, Oid the mechanism for which the provider is being set mech)This method is used to indicate to the GSSManager that the application would like a particular provider to be used ahead of all others when support is desired for the given mechanism. |
| public abstract GSSContext | Returns: an unestablished GSSContextthe name of the target peer. peer, Oid the Oid of the desired mechanism. Use mech, GSSCredential null
to request the default mechanism.the credentials of the initiator. Use
myCred, int null to act as the default initiator principal.the lifetime, in seconds, requested for the
context. Use lifetime)GSSContext. to request that the context have the
maximum permitted lifetime. Use GSSContext. to request a default lifetime for the
context.Factory method for creating a context on the initiator's side. |
| public abstract GSSContext | Returns: an unestablished GSSContextthe credentials for the acceptor. Use
myCred)null to act as a default acceptor principal.Factory method for creating a context on the acceptor' side. |
| public abstract GSSContext | Returns: the previously established GSSContextthe token previously emitted from the
export method. interProcessToken)Factory method for creating a previously exported context. |
| public abstract GSSCredential | Returns: a GSSCredential of the requested type.The intended usage for this credential object. The value
of this parameter must be one of:
usage)GSSCredential.,
GSSCredential., and
GSSCredential..Factory method for acquiring default credentials. |
| public abstract GSSCredential | Returns: a GSSCredential of the requested type.the name of the principal for whom this credential is to be
acquired. Use name, int null to specify the default principal.The number of seconds that credentials should remain
valid. Use lifetime, Oid GSSCredential. to request that the credentials
have the maximum permitted lifetime. Use GSSCredential. to
request default credential lifetime.the Oid of the desired mechanism. Use mech, int (Oid) null
to request the default mechanism.The intended usage for this credential object. The value
of this parameter must be one of:
usage)GSSCredential.,
GSSCredential., and
GSSCredential..Factory method for acquiring a single mechanism credential. |
| public abstract GSSCredential | Returns: a GSSCredential of the requested type.the name of the principal for whom this credential is to
be acquired. Use name, int null to specify the default
principal.The number of seconds that credentials should remain
valid. Use lifetime, Oid[] GSSCredential. to request that the credentials
have the maximum permitted lifetime. Use GSSCredential. to
request default credential lifetime.an array of Oid's indicating the mechanisms over which
the credential is to be acquired. Use mechs, int (Oid[]) null for
requesting a system specific default set of mechanisms.The intended usage for this credential object. The value
of this parameter must be one of:
usage)GSSCredential.,
GSSCredential., and
GSSCredential..Factory method for acquiring credentials over a set of mechanisms. |
| public abstract GSSName | Returns: a GSSName representing the indicated principalthe string representing a printable form of the name to
create. nameStr, Oid the Oid specifying the namespace of the printable name
supplied. nameType)null can be used to specify
that a mechanism specific default printable syntax should
be assumed by each mechanism that examines nameStr.
It is not advisable to use the nametype NT_EXPORT_NAME with this
method.Factory method to convert a string name from the specified namespace to a GSSName object. |
| public abstract GSSName | Returns: a GSSName representing the indicated principalthe byte array containing the name to create name, Oid the Oid specifying the namespace of the name supplied
in the byte array. nameType)null can be used to specify that a
mechanism specific default syntax should be assumed by each mechanism
that examines the byte array.Factory method to convert a byte array containing a name from the specified namespace to a GSSName object. |
| public abstract GSSName | Returns: a GSSName representing the indicated principalthe string representing a printable form of the name to
create. nameStr, Oid the Oid specifying the namespace of the printable name
supplied. nameType, Oid null can be used to specify
that a mechanism specific default printable syntax should
be assumed by each mechanism that examines nameStr.
It is not advisable to use the nametype NT_EXPORT_NAME with this
method.Oid specifying the mechanism for which the name should be
canonicalized mech)Factory method to convert a string name from the specified namespace to a GSSName object and canonicalize it at the same time for a mechanism. |
| public abstract GSSName | Returns: a GSSName representing the indicated principalthe byte array containing the name to create name, Oid the Oid specifying the namespace of the name supplied
in the byte array. nameType, Oid null can be used to specify that a
mechanism specific default syntax should be assumed by each mechanism
that examines the byte array.Oid specifying the mechanism for which the name should be
canonicalized mech)Factory method to convert a byte array containing a name from the specified namespace to a GSSName object and canonicalize it at the same time for a mechanism. |
| public static GSSManager | |
| public abstract Oid[] | Returns: an array of Oid objects corresponding to the mechanisms that are available. Anull value is returned when no
mechanism are available (an example of this would be when mechanism
are dynamically configured, and currently no mechanisms are
installed).Returns a list of mechanisms that are available to GSS-API callers through this GSSManager. |
| public abstract Oid[] | Returns: an array of Oid objects corresponding to the mechanisms that support the specified name type.null is returned when no
mechanisms are found to support the specified name type.the Oid of the name type to look for nameType)Returns a list of mechanisms that support the indicated name type. |
| public abstract Oid[] | Returns: an array of Oid objects corresponding to the name types that the mechanism supports.the Oid of the mechanism to query mech)Returns then name types supported by the indicated mechanism. |
| GSSManager | back to summary |
|---|---|
| public GSSManager() Constructor for subclasses to call. | |
| addProviderAtEnd | back to summary |
|---|---|
| public abstract void addProviderAtEnd(Provider p, Oid mech) throws GSSException This method is used to indicate to the GSSManager that the application would like a particular provider to be used if no other provider can be found that supports the given mechanism. When a value of null is used instead of an Oid for the mechanism, the GSSManager must use the indicated provider for any mechanism. Calling this method repeatedly preserves the older settings but raises them above newer ones in preference thus forming an ordered list of providers and Oid pairs that grows at the bottom. Thus, the older provider settings will be utilized first before this one is. If there are any previously existing preferences that conflict with the preference being set here, then the GSSManager should ignore this request. If the GSSManager implementation does not support an SPI with a pluggable provider architecture it should throw a GSSException with the status code GSSException.UNAVAILABLE to indicate that the operation is unavailable. Suppose an application desired that when a mechanism of Oid m1 is needed the system default providers always be checked first, and only when they do not support m1 should a provider A be checked. It would then make the call:
GSSManager mgr = GSSManager.getInstance();
mgr.addProviderAtEnd(A, m1);
Now, if it also desired that for all mechanisms the provider B be
checked after all configured providers have been checked, it would
then call:
mgr.addProviderAtEnd(B, null);
Effectively the list of preferences now becomes {..., (A, m1), (B,
null)}.Suppose at a later time the following call is made to the same GSSManager instance:
mgr.addProviderAtEnd(B, m2)
then the previous setting with the pair (B, null) subsumes this and
therefore this request should be ignored. The same would happen if a
request is made for the already existing pairs of (A, m1) or (B,
null).Please note, however, that the following call:
mgr.addProviderAtEnd(A, null)
is not subsumed by the previous setting of (A, m1) and the list will
effectively become {..., (A, m1), (B, null), (A, null)}
| |
| addProviderAtFront | back to summary |
|---|---|
| public abstract void addProviderAtFront(Provider p, Oid mech) throws GSSException This method is used to indicate to the GSSManager that the
application would like a particular provider to be used ahead of all
others when support is desired for the given mechanism. When a value
of null is used instead of an
Calling this method repeatedly preserves the older settings but
lowers them in preference thus forming an ordered list of provider
and
Calling addProviderAtFront with a null If the GSSManager implementation does not support an SPI with a pluggable provider architecture it should throw a GSSException with the status code GSSException.UNAVAILABLE to indicate that the operation is unavailable. Suppose an application desired that the provider A always be checked first when any mechanism is needed, it would call:
GSSManager mgr = GSSManager.getInstance();
// mgr may at this point have its own pre-configured list
// of provider preferences. The following will prepend to
// any such list:
mgr.addProviderAtFront(A, null);
Now if it also desired that the mechanism of Oid m1 always be
obtained from the provider B before the previously set A was checked,
it would call:
mgr.addProviderAtFront(B, m1);
The GSSManager would then first check with B if m1 was needed. In
case B did not provide support for m1, the GSSManager would continue
on to check with A. If any mechanism m2 is needed where m2 is
different from m1 then the GSSManager would skip B and check with A
directly.Suppose at a later time the following call is made to the same GSSManager instance:
mgr.addProviderAtFront(B, null)
then the previous setting with the pair (B, m1) is subsumed by this
and should be removed. Effectively the list of preferences now
becomes {(B, null), (A, null),
... //followed by the pre-configured list.Please note, however, that the following call:
mgr.addProviderAtFront(A, m3)
does not subsume the previous setting of (A, null) and the list will
effectively become {(A, m3), (B, null), (A, null), ...}
| |
| createContext | back to summary |
|---|---|
| public abstract GSSContext createContext(GSSName peer, Oid mech, GSSCredential myCred, int lifetime) throws GSSException Factory method for creating a context on the initiator's side.
Non-default values for lifetime cannot always be honored by the
underlying mechanism, thus applications should be prepared to call
| |
| createContext | back to summary |
|---|---|
| public abstract GSSContext createContext(GSSCredential myCred) throws GSSException Factory method for creating a context on the acceptor' side. The context's properties will be determined from the input token supplied to the accept method.
| |
| createContext | back to summary |
|---|---|
| public abstract GSSContext createContext(byte[] interProcessToken) throws GSSException Factory method for creating a previously exported context. The context properties will be determined from the input token and cannot be modified through the set methods.
Implementations are not required to support the inter-process
transfer of security contexts. Before exporting a context, calling
the
| |
| createCredential | back to summary |
|---|---|
| public abstract GSSCredential createCredential(int usage) throws GSSException Factory method for acquiring default credentials. This will cause the GSS-API to use system specific defaults for the set of mechanisms, name, and lifetime.
| |
| createCredential | back to summary |
|---|---|
| public abstract GSSCredential createCredential(GSSName name, int lifetime, Oid mech, int usage) throws GSSException Factory method for acquiring a single mechanism credential.
Non-default values for lifetime cannot always be honored by the
underlying mechanisms, thus applications should be prepared to call
| |
| createCredential | back to summary |
|---|---|
| public abstract GSSCredential createCredential(GSSName name, int lifetime, Oid[] mechs, int usage) throws GSSException Factory method for acquiring credentials over a set of
mechanisms. This method attempts to acquire credentials for
each of the mechanisms specified in the array called mechs. To
determine the list of mechanisms for which the acquisition of
credentials succeeded, the caller should use the
Non-default values for lifetime cannot always be honored by the
underlying mechanisms, thus applications should be prepared to call
| |
| createName | back to summary |
|---|---|
| public abstract GSSName createName(String nameStr, Oid nameType) throws GSSException Factory method to convert a string name from the
specified namespace to a GSSName object. In general, the
| |
| createName | back to summary |
|---|---|
| public abstract GSSName createName(byte[] name, Oid nameType) throws GSSException Factory method to convert a byte array containing a
name from the specified namespace to a GSSName object. In general,
the
| |
| createName | back to summary |
|---|---|
| public abstract GSSName createName(String nameStr, Oid nameType, Oid mech) throws GSSException Factory method to convert a string name from the
specified namespace to a GSSName object and canonicalize it at the
same time for a mechanism. In other words, this method is
a utility that does the equivalent of two steps: the
| |
| createName | back to summary |
|---|---|
| public abstract GSSName createName(byte[] name, Oid nameType, Oid mech) throws GSSException Factory method to convert a byte array containing a
name from the specified namespace to a GSSName object and canonicalize
it at the same time for a mechanism. In other words, this method is a
utility that does the equivalent of two steps: the
| |
| getInstance | back to summary |
|---|---|
| public static GSSManager getInstance() Returns the default GSSManager implementation.
| |
| getMechs | back to summary |
|---|---|
| public abstract Oid[] getMechs() Returns a list of mechanisms that are available to GSS-API callers
through this GSSManager. The default GSSManager obtained from the
| |
| getMechsForName | back to summary |
|---|---|
| public abstract Oid[] getMechsForName(Oid nameType) Returns a list of mechanisms that support the indicated name type.
The Kerberos v5 mechanism ("1.2.840.113554.1.2.2") will always be
returned in this list when the indicated nametype is one of
| |
| getNamesForMech | back to summary |
|---|---|
| public abstract Oid[] getNamesForMech(Oid mech) throws GSSException Returns then name types supported by the indicated mechanism.
The default GSSManager instance includes support for the Kerberos v5
mechanism. When this mechanism ("1.2.840.113554.1.2.2") is indicated,
the returned list will contain at least the following nametypes:
| |