public abstract class GSSManager extends Object
GSSName、GSSCredential、GSSContextという3つのGSS-APIインタフェースを実装するクラスのインスタンスを作成できます。 さらに、利用できるメカニズムの一覧および各メカニズムがサポートしている名前型を照会するためのメソッドも組み込まれています。
デフォルトのGSSManagerサブクラスのインスタンスは、staticメソッドgetInstanceを使用して取得できます。その他のGSSManagerサブクラスは、アプリケーションから任意にインスタンス化できます。 デフォルトのGSSManagerインスタンスでは、Kerberos v5も含め、すべてのGSS-APIメカニズムがサポートされます。 このメカニズムは、OID「1.2.840.113554.1.2.2」として識別され、RFC 1964に定義されています。
GSSManager abstractクラスの拡張として作成したサブクラスは、既知のサービス・プロバイダ仕様を利用する、モジュール化されたプロバイダ・ベース層として実装されます。 GSSManager APIを使用すれば、これらのサブクラスの実装に対してプロバイダの優先順位を設定できます。 プロバイダ・ベースの構成がサポートされていない場合は、明確に定義された例外がスローされます。 アプリケーションを移植する可能性がある場合は、このことを認識し、例外をキャッチすることによって、適切に回復する必要があります。
プロバイダの使用方法として、次の3つの方法を想定しています。
GSSManagerクラスには、これらの使用モードを有効にするために、2つのメソッドaddProviderAtFrontおよびaddProviderAtEndが用意されています。 これらのメソッドを実行すると、<プロバイダ, OID>というペアの順序付きリストが作成されます。各ペアは、特定のOIDに優先的に使用されるプロバイダを示しています。
GSSManagerによって作成された様々なGSS-APIオブジェクト間では、一定の対話が行われます。このとき、特定のメカニズムに使用されるプロバイダを、すべてのオブジェクトで使用する必要がある場合があります。 たとえば、あるGSSCredentialが、メカニズムmに使用されるプロバイダpの資格要素で構成されているとします。この要素は通常、メカニズムmにこのプロバイダpを使用するGSSContextに渡す必要があります。 移植性を最大化するには、異なるGSSManagerで作成したオブジェクトを混在させないことをお薦めします。また、すでにオブジェクトを作成したGSSManager上でaddProviderAtFrontメソッドを呼び出す場合には、可能なかぎり別のGSSManagerインスタンスを作成するようにしてください。
次のコード例は、GSSManagerの使用方法を示しています。
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);
サーバー側では、次のソースが使用されます。
// 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| コンストラクタ | 説明 |
|---|---|
GSSManager() |
| 修飾子と型 | メソッド | 説明 |
|---|---|---|
abstract void |
addProviderAtEnd(Provider p, Oid mech) |
このメソッドを使用して、指定されたメカニズムをサポートするプロバイダが見つからないときに使用するプロバイダを、GSSManagerに設定します。
|
abstract void |
addProviderAtFront(Provider p, Oid mech) |
このメソッドを使用して、サポートが必要なメカニズムに対して特定のプロバイダを優先して使用することをGSSManagerに設定します。
|
abstract GSSContext |
createContext(byte[] interProcessToken) |
以前にエクスポートされたコンテキストを作成するためのファクトリ・メソッドです。
|
abstract GSSContext |
createContext(GSSCredential myCred) |
受け入れ側でコンテキストを作成するためのファクトリ・メソッドです。
|
abstract GSSContext |
createContext(GSSName peer, Oid mech, GSSCredential myCred, int lifetime) |
起動側でコンテキストを作成するためのファクトリ・メソッドです。
|
abstract GSSCredential |
createCredential(GSSName name, int lifetime, Oid[] mechs, int usage) |
複数のメカニズムに対して資格を取得するためのファクトリ・メソッドです。
|
abstract GSSCredential |
createCredential(GSSName name, int lifetime, Oid mech, int usage) |
メカニズムの資格を1つだけ取得するためのファクトリ・メソッドです。
|
abstract GSSCredential |
createCredential(int usage) |
デフォルトの資格を取得するためのファクトリ・メソッドです。
|
abstract GSSName |
createName(byte[] name, Oid nameType) |
指定された名前空間のbyte配列をGSSNameオブジェクトに変換するファクトリ・メソッドです。
|
abstract GSSName |
createName(byte[] name, Oid nameType, Oid mech) |
指定された名前空間の名前を含むbyte配列をGSSNameオブジェクトに変換し、それをメカニズムに対して標準化するファクトリ・メソッドです。
|
abstract GSSName |
createName(String nameStr, Oid nameType) |
指定された名前空間の文字列名をGSSNameオブジェクトに変換するファクトリ・メソッドです。
|
abstract GSSName |
createName(String nameStr, Oid nameType, Oid mech) |
指定された名前空間の文字列名をGSSNameオブジェクトに変換し、それをメカニズムに対して標準化するファクトリ・メソッドです。
|
static GSSManager |
getInstance() |
デフォルトのGSSManager実装を返します。
|
abstract Oid[] |
getMechs() |
このGSSManagerを通してGSS-APIの呼出し側が利用できるメカニズムのリストを返します。
|
abstract Oid[] |
getMechsForName(Oid nameType) |
指定された名前型をサポートしているメカニズムのリストを返します。
|
abstract Oid[] |
getNamesForMech(Oid mech) |
指定されたメカニズムがサポートしている名前型を返します。
|
public static GSSManager getInstance()
public abstract Oid[] getMechs()
getInstance()メソッドから返されるデフォルトのGSSManagerのリストには、OID「1.2.840.113554.1.2.2」が含まれています。 このOIDは、RFC 1964に定義されているKerberos v5 GSS-APIメカニズムの識別IDです。 null値が返される。 public abstract Oid[] getNamesForMech(Oid mech) throws GSSException
デフォルトのGSSManagerインスタンスでは、Kerberos v5メカニズムがサポートされます。 このメカニズム(「1.2.840.113554.1.2.2」)を指定した場合は、少なくともGSSName.NT_HOSTBASED_SERVICE、GSSName.NT_EXPORT_NAME、およびKerberos v5固有のOID「1.2.840.113554.1.2.2.1」を含む名前型リストが返されます。 OID「1.2.840.113554.1.2.2.1」の名前空間はRFC 1964で定義されています。
mech - 照会するメカニズムのOIDGSSException - 次のメジャー・エラー・コードを含む。GSSException.BAD_MECH GSSException.FAILUREgetMechsForName(Oid)public abstract Oid[] getMechsForName(Oid nameType)
指定された名前型がGSSName.NT_HOSTBASED_SERVICE、GSSName.NT_EXPORT_NAME、または「1.2.840.113554.1.2.2.1」のいずれかの場合、このリストには常にKerberos v5メカニズム(「1.2.840.113554.1.2.2」)が含まれます。
nameType - 検索対象の名前型のOIDnullが返される。getNamesForMech(Oid)public abstract GSSName createName(String nameStr, Oid nameType) throws GSSException
GSSNameオブジェクトには通常、複数の名前表現(サポートされているメカニズムごとに1つずつ)が含まれています。ただし、名前空間の型パラメータにNT_EXPORT_NAMEが指定されているとき、またはこのGSS-API実装が複数メカニズムでない場合などは例外です。 このメソッドは、NT_EXPORT_NAME型では使用しないでください。以前にエクスポートされた名前が任意のバイトで構成される場合、その名前をStringとして表現すると、文字エンコーディング・スキームの問題が発生することがあるためです。 このような名前を変換する場合は、オーバーロード形式のこのメソッドcreateNameにそれらのバイトを直接渡すことをお薦めします。 nameStr - 作成する名前のプリント可能形式を表す文字列。nameType - 指定されたプリント可能名の名前空間を指定するOID。nullを使用すれば、nameStrを検査する各メカニズムに各メカニズム固有のデフォルトのプリント可能構文を使用できる。 このメソッドで名前型NT_EXPORT_NAMEはできるだけ使用しない。 GSSException - 次のメジャー・エラー・コードを含む。GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILUREGSSName, GSSName.NT_EXPORT_NAMEpublic abstract GSSName createName(byte[] name, Oid nameType) throws GSSException
GSSNameオブジェクトには通常、複数の名前表現(サポートされているメカニズムごとに1つずつ)が含まれています。ただし、名前空間の型パラメータにNT_EXPORT_NAMEが指定されているとき、またはこのGSS-API実装が複数メカニズムでない場合などは例外です。 渡されるバイトは、指定された名前型に選択されているエンコーディング・スキームに応じて、配下の各メカニズムによって解釈されます。 name - 作成する名前を含むbyte配列nameType - byte配列に指定された名前の名前空間を指定するOID。byte配列を検査するときに、各メカニズム固有のデフォルトの構文を使用する場合は、nullを指定できる。GSSException - 次のメジャー・エラー・コードを含む。GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILUREGSSName, GSSName.NT_EXPORT_NAMEpublic abstract GSSName createName(String nameStr, Oid nameType, Oid mech) throws GSSException
createNameメソッドを呼び出してからGSSName.canonicalizeメソッドを呼び出す2ステップと同等の処理を実行するユーティリティです。 nameStr - 作成する名前のプリント可能形式を表す文字列。nameType - 指定されたプリント可能名の名前空間を指定するOID。nullを使用すれば、nameStrを検査する各メカニズムに各メカニズム固有のデフォルトのプリント可能構文を使用できる。 このメソッドで名前型NT_EXPORT_NAMEはできるだけ使用しない。 mech - メカニズムを示すOID。このメカニズムに対して名前が標準化されるGSSException - 次のメジャー・エラー・コードを含む。GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILUREGSSName.canonicalize(Oid), GSSName.NT_EXPORT_NAMEpublic abstract GSSName createName(byte[] name, Oid nameType, Oid mech) throws GSSException
createNameメソッドを呼び出してからGSSName.canonicalizeメソッドを呼び出す2ステップと同等の処理を実行するユーティリティです。 name - 作成する名前を含むbyte配列nameType - byte配列に指定された名前の名前空間を指定するOID。byte配列を検査するときに、各メカニズム固有のデフォルトの構文を使用する場合は、nullを指定できる。mech - メカニズムを示すOID。このメカニズムに対して名前が標準化されるGSSException - 次のメジャー・エラー・コードを含む。GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILUREGSSName.canonicalize(Oid), GSSName.NT_EXPORT_NAMEpublic abstract GSSCredential createCredential(int usage) throws GSSException
GSS-APIのメカニズム・プロバイダは、呼出し側にローカル・アクセス制御ポリシーを適用することにより、権限のない呼出し側が許可されていない資格を取得するのを防止する必要があります。 各メカニズム・プロバイダが必要とするアクセス権の種類は、メカニズムごとに文書にまとめられています。 アクセス権の確認に失敗した場合、このメソッドからSecurityExceptionがスローされます。
usage - この資格オブジェクトの使用目的。 このパラメータの値は、GSSCredential.INITIATE_AND_ACCEPT、GSSCredential.ACCEPT_ONLY、およびGSSCredential.INITIATE_ONLYのいずれかにする必要がある。 GSSException - 次のメジャー・エラー・コードを含む。GSSException.BAD_MECH, GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.CREDENTIALS_EXPIRED, GSSException.NO_CRED, GSSException.FAILUREGSSCredentialpublic abstract GSSCredential createCredential(GSSName name, int lifetime, Oid mech, int usage) throws GSSException
GSS-APIのメカニズム・プロバイダは、呼出し側にローカル・アクセス制御ポリシーを適用することにより、権限のない呼出し側が許可されていない資格を取得するのを防止する必要があります。 各メカニズム・プロバイダが必要とするアクセス権の種類は、メカニズムごとに文書にまとめられています。 アクセス権の確認に失敗した場合、このメソッドからSecurityExceptionがスローされます。
デフォルト以外のlifetime値は基本となっているメカニズムで受け付けられない場合があります。その場合、アプリケーションは、返された資格のgetRemainingLifetimeを呼び出す必要があります。
name - この資格を取得する主体の名前。 デフォルトの主体を指定する場合はnullを使用する。 lifetime - 資格の残りの寿命(秒単位)。 資格の寿命を設定可能な最大期限にすることを要求するには、GSSCredential.INDEFINITE_LIFETIMEを使用する。 資格のデフォルトの寿命を要求する場合はGSSCredential.DEFAULT_LIFETIMEを使用する。 mech - 目的のメカニズムのOID。 デフォルトのメカニズムを要求する場合は(Oid) null を使用する。 usage - この資格オブジェクトの使用目的。 このパラメータの値は、GSSCredential.INITIATE_AND_ACCEPT、GSSCredential.ACCEPT_ONLY、およびGSSCredential.INITIATE_ONLYのいずれかにする必要がある。 GSSException - 次のメジャー・エラー・コードを含む。GSSException.BAD_MECH, GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.CREDENTIALS_EXPIRED, GSSException.NO_CRED, GSSException.FAILUREGSSCredentialpublic abstract GSSCredential createCredential(GSSName name, int lifetime, Oid[] mechs, int usage) throws GSSException
GSSCredential.getMechsメソッドを使用する必要があります。
GSS-APIのメカニズム・プロバイダは、呼出し側にローカル・アクセス制御ポリシーを適用することにより、権限のない呼出し側が許可されていない資格を取得するのを防止する必要があります。 各メカニズム・プロバイダが必要とするアクセス権の種類は、メカニズムごとに文書にまとめられています。 アクセス権の確認に失敗した場合、このメソッドからSecurityExceptionがスローされます。
デフォルト以外のlifetime値は基本となっているメカニズムで受け付けられない場合があります。その場合、アプリケーションは、返された資格のgetRemainingLifetimeを呼び出す必要があります。
name - この資格を取得する主体の名前。 デフォルトの主体を指定する場合はnullを使用する。 lifetime - 資格の残りの寿命(秒単位)。 資格の寿命を設定可能な最大期限にすることを要求するには、GSSCredential.INDEFINITE_LIFETIMEを使用する。 資格のデフォルトの寿命を要求する場合はGSSCredential.DEFAULT_LIFETIMEを使用する。 mechs - この資格を取得するメカニズムを示すOIDの配列。 デフォルトのメカニズムをリクエストする場合は、(Oid[]) nullを使用する。 usage - この資格オブジェクトの使用目的。 このパラメータの値は、GSSCredential.INITIATE_AND_ACCEPT、GSSCredential.ACCEPT_ONLY、およびGSSCredential.INITIATE_ONLYのいずれかにする必要がある。 GSSException - 次のメジャー・エラー・コードを含む。GSSException.BAD_MECH, GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.CREDENTIALS_EXPIRED, GSSException.NO_CRED, GSSException.FAILUREGSSCredentialpublic abstract GSSContext createContext(GSSName peer, Oid mech, GSSCredential myCred, int lifetime) throws GSSException
SecurityExceptionがスローされます。
デフォルト以外のlifetime値は配下のメカニズムで受け付けられない場合があります。その場合、アプリケーションは、返されたコンテキストに対してgetLifetimeを呼び出す必要があります。
peer - ターゲット・ピアの名前。mech - 目的のメカニズムのOID。 デフォルトのメカニズムを要求する場合はnullを使用する。 myCred - 起動側の資格。 デフォルトの起動側主体として機能させる場合は、nullを使用する。 lifetime - コンテキストにリクエストする寿命(秒単位)。 コンテキストの寿命を設定可能な最大期限にすることをリクエストするには、GSSContext.INDEFINITE_LIFETIMEを使用する。 コンテキストのデフォルトの寿命をリクエストする場合はGSSContext.DEFAULT_LIFETIMEを使用する。 GSSException - 次のメジャー・エラー・コードを含む。GSSException.NO_CRED GSSException.CREDENTIALS_EXPIRED GSSException.BAD_NAMETYPE GSSException.BAD_MECH GSSException.FAILUREGSSContextpublic abstract GSSContext createContext(GSSCredential myCred) throws GSSException
SecurityExceptionがスローされます。 myCred - 受け入れ側の資格。 デフォルトの受け入れ側主体として機能させる場合は、nullを使用する。 GSSException - 次のメジャー・エラー・コードを含む。GSSException.NO_CRED GSSException.CREDENTIALS_EXPIRED GSSException.BAD_MECH GSSException.FAILUREGSSContextpublic abstract GSSContext createContext(byte[] interProcessToken) throws GSSException
セキュリティ・コンテキストのプロセス間転送を実装がサポートすることは必須ではありません。 コンテキストをエクスポートする前にGSSContext.isTransferableを呼び出すと、コンテキストを転送可能かどうかがわかります。 コンテキストの転送をサポートしていない実装でこのメソッドを呼び出すと、エラー・コードGSSException.UNAVAILABLEが設定されたGSSExceptionがスローされます。 一部のメカニズム・プロバイダでは、セキュリティ・コンテキストを起動または受け入れるアクセス権が呼出し側に付与されている必要があります。 アクセス権の確認に失敗した場合、このメソッドからSecurityExceptionがスローされます。
interProcessToken - 以前にexportメソッドから生成されたトークン。GSSException - 次のメジャー・エラー・コードを含む。GSSException.NO_CONTEXT, GSSException.DEFECTIVE_TOKEN, GSSException.UNAVAILABLE, GSSException.UNAUTHORIZED, GSSException.FAILUREGSSContextpublic abstract void addProviderAtFront(Provider p, Oid mech) throws GSSException
Oidではなくnull値を使用したときは、使用するメカニズムに関係なく、指定されたプロバイダが優先して使用されます。 指定されたプロバイダが必要なメカニズムをサポートしていない場合にだけ、別のプロバイダが使用されます。
このメソッドを繰返し呼び出しても、以前の設定は保持されます。ただし、それらの優先順位が低くなり、作成されたプロバイダとOidのペアの順序付きリストが最優先されます。
Oidにnullを指定してaddProviderAtFrontを呼び出すと、GSSManagerインスタンスでこのプロバイダに設定された以前の優先順位がすべて削除されます。 Oidにnull以外の値を指定してaddProviderAtFrontを呼び出すと、このメカニズムとこのプロバイダを使用して設定された以前の優先順位がすべて削除されます。
GSSManager実装がプラグイン可能なプロバイダ・アーキテクチャを備えたSPIをサポートしていない場合は、状態コードGSSException.UNAVAILABLEが設定されたGSSExceptionがスローされ、この操作が利用できないことが示されます。
たとえば、メカニズムが必要なときは、プロバイダAを最初に確認するように設定するには、次の呼出しを行います。
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);
以前に設定されたAを確認する前に、OIDがm1であるメカニズムをプロバイダBから取得する場合は、次の呼出しを行います。
mgr.addProviderAtFront(B, m1);
GSSManagerは、m1が必要な場合、まずBを確認します。 Bがm1をサポートしていない場合は、次にAを確認します。 メカニズムm2が必要で、m2がm1と異なる場合は、Bを省略して直接Aを確認します。 たとえば、同じGSSManagerインスタンスに対して、次の呼出しを行うとします。
mgr.addProviderAtFront(B, null)
ペア(B, m1)の以前の設定がこの設定に包含されて、削除されます。 この結果、優先順位のリストは{(B, null),(A, null), ...//以前に設定されたリスト}になります。 ただし、次の呼出しには注意してください。
mgr.addProviderAtFront(A, m3)
この呼出しを実行しても、以前の設定(A, null)を包含せず、リストは{(A, m3),(B, null),(A, null), ...}になります。p - mechに指定したメカニズムのサポートが必要なときに、使用するプロバイダのインスタンス。mech - このプロバイダが設定されているメカニズムGSSException - 次のメジャー・エラー・コードを含む。GSSException.UNAVAILABLE, GSSException.FAILUREpublic abstract void addProviderAtEnd(Provider p, Oid mech) throws GSSException
このメソッドを繰返し呼び出しても、以前の設定は保持されます。ただし、それらの優先順位は新しい設定より高くなり、作成されたプロバイダとOidのペアの順序付きリストの優先順位がもっとも低くなります。 つまり、このリストが使用される前に、まず以前のプロバイダ設定が使用されます。
以前に設定した既存の優先順位の中に、ここで設定する優先順位と競合するものがある場合、この要求は無視されます。
GSSManager実装がプラグイン可能なプロバイダ・アーキテクチャを備えたSPIをサポートしていない場合は、状態コードGSSException.UNAVAILABLEが設定されたGSSExceptionがスローされ、この操作が利用できないことが示されます。
たとえば、Oidがm1であるメカニズムが必要なときは、システムのデフォルト・プロバイダを最初に確認し、m1がサポートされていない場合のみ、プロバイダAを確認します。 次の呼出しを行います。
GSSManager mgr = GSSManager.getInstance();
mgr.addProviderAtEnd(A, m1);
設定したプロバイダをすべて確認してから、すべてのメカニズムについてプロバイダBを確認する場合は、次の呼出しを行います。
mgr.addProviderAtEnd(B, null);
優先順位のリストが、{...,(A, m1),(B, null)}になります。たとえば、同じGSSManagerインスタンスに対して、次の呼出しを行うとします。
mgr.addProviderAtEnd(B, m2)
ペア(B, null)の以前の設定がこの設定を包含し、この要求は無視されます。 既存のペア(A, m1)または(B, null)に対して要求した場合も同じ結果になります。 ただし、次の呼出しには注意してください。
mgr.addProviderAtEnd(A, null)
この呼出しを実行しても、以前の設定(A, m1)によって包含されず、リストは{...,(A, m1),(B, null),(A, null)}になります。p - mechに指定したメカニズムのサポートが必要なときに、使用するプロバイダのインスタンス。mech - このプロバイダが設定されているメカニズムGSSException - 次のメジャー・エラー・コードを含む。GSSException.UNAVAILABLE, GSSException.FAILURE バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。