public abstract class GSSManager extends Object
GSSName
、GSSCredential
、GSSContext
という3つのGSS-APIインタフェースを実装するクラスのインスタンスを作成できます。さらに、利用できるメカニズムの一覧および各メカニズムがサポートしている名前型を照会するためのメソッドも組み込まれています。
デフォルトのGSSManager
サブクラスのインスタンスは、staticメソッドgetInstance
を使用して取得できます。その他のGSSManager
サブクラスは、アプリケーションから任意にインスタンス化できます。デフォルトのGSSManager
インスタンスでは、Kerberos v5も含め、すべてのGSS-APIメカニズムがサポートされます。Kerberos v5メカニズムは、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.FAILURE
getMechsForName(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.FAILURE
GSSName
, GSSName.NT_EXPORT_NAME
public 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.FAILURE
GSSName
, GSSName.NT_EXPORT_NAME
public abstract GSSName createName(String nameStr, Oid nameType, Oid mech) throws GSSException
createName
メソッドを呼び出してからGSSName.canonicalize
メソッドを呼び出す場合と同じ処理を実行するユーティリティです。nameStr
- 作成する名前のプリント可能形式を表す文字列。nameType
- 指定されたプリント可能名の名前空間を指定するOID。null
を使用すれば、nameStrを検査する各メカニズムに各メカニズム固有のデフォルトのプリント可能構文を使用できる。このメソッドで名前型NT_EXPORT_NAMEはできるだけ使用しない。mech
- メカニズムを示すOID。このメカニズムに対して名前が標準化されるGSSException
- 次のメジャー・エラー・コードを含む。GSSException.BAD_NAMETYPE
, GSSException.BAD_NAME
, GSSException.BAD_MECH
, GSSException.FAILURE
GSSName.canonicalize(Oid)
, GSSName.NT_EXPORT_NAME
public abstract GSSName createName(byte[] name, Oid nameType, Oid mech) throws GSSException
createName
メソッドを呼び出してからGSSName.canonicalize
メソッドを呼び出す場合と同じ処理を実行するユーティリティです。name
- 作成する名前を含むbyte配列nameType
- byte配列に指定された名前の名前空間を指定するOID。byte配列を検査するときに、各メカニズム固有のデフォルトの構文を使用する場合は、null
を指定できる。mech
- メカニズムを示すOID。このメカニズムに対して名前が標準化されるGSSException
- 次のメジャー・エラー・コードを含む。GSSException.BAD_NAMETYPE
, GSSException.BAD_NAME
, GSSException.BAD_MECH
, GSSException.FAILURE
GSSName.canonicalize(Oid)
, GSSName.NT_EXPORT_NAME
public 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.FAILURE
GSSCredential
public 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.FAILURE
GSSCredential
public 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.FAILURE
GSSCredential
public 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.FAILURE
GSSContext
public abstract GSSContext createContext(GSSCredential myCred) throws GSSException
SecurityException
がスローされます。myCred
- 受け入れ側の資格。デフォルトの受け入れ側主体として機能させる場合は、null
を使用する。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.NO_CRED
GSSException.CREDENTIALS_EXPIRED
GSSException.BAD_MECH
GSSException.FAILURE
GSSContext
public 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.FAILURE
GSSContext
public 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.FAILURE
public 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, 2014, Oracle and/or its affiliates. All rights reserved.