|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public interface SaslClient
SASL 認証をクライアントとして実行します。
プロトコルライブラリ (LDAP ライブラリなど) は、特定の SASL 機構によって定義された認証を実行するために、このクラスのインスタンスを取得します。SaslClient インスタンスに対するメソッドを呼び出すと、チャレンジが処理され、SaslClient によって実装された SASL 機構に従って応答が作成されます。認証が処理されるときに、SASL クライアントの認証交換の状態が暗号化されます。
次に、LDAP ライブラリがどのように SaslClient を使用するかの例を示します。まず、SaslClient のインスタンスを取得します。
これで、クライアントを認証に使用できます。たとえば、LDAP ライブラリは次のようにクライアントを使用できます。SaslClient sc = Sasl.createSaslClient(mechanisms, authorizationId, protocol, serverName, props, callbackHandler);
機構に初期応答が含まれている場合、ライブラリは空のチャレンジで evaluateChallenge() を呼び出し、初期応答を取得します。IMAP4 などのプロトコルは、サーバへの最初の認証コマンドを持つ初期応答が含まれていないため、最初に hasInitialResponse() または evaluateChallenge() を呼び出さないで認証を開始します。サーバが認証コマンドに応答すると、初期チャレンジが送信されます。クライアントが最初にデータを送信する SASL 機構では、サーバはデータを含まないチャレンジを発行しておかなければなりません。それによって、空のチャレンジによる evaluateChallenge() への呼び出しがクライアントで行われます。// Get initial response and send to server byte[] response = (sc.hasInitialResponse() ? sc.evaluateChallenge(new byte[0]) : null); LdapResult res = ldap.sendBindRequest(dn, sc.getName(), response); while (!sc.isComplete() && (res.status == SASL_BIND_IN_PROGRESS || res.status == SUCCESS)) { response = sc.evaluateChallenge(res.getBytes()); if (res.status == SUCCESS) { // we're done; don't expect to send another BIND if (response != null) { throw new SaslException( "Protocol error: attempting to send response after completion"); } break; } res = ldap.sendBindRequest(dn, sc.getName(), response); } if (sc.isComplete() && res.status == SUCCESS) { String qop = (String) sc.getNegotiatedProperty(Sasl.QOP); if (qop != null && (qop.equalsIgnoreCase("auth-int") || qop.equalsIgnoreCase("auth-conf"))) {// Use SaslClient.wrap() and SaslClient.unwrap() for future // communication with server ldap.in = new SecureInputStream(sc, ldap.in); ldap.out = new SecureOutputStream(sc, ldap.out); } }
Sasl
,
SaslClientFactory
メソッドの概要 | |
---|---|
void |
dispose()
SaslClient が使用しているシステムリソースまたはセキュリティ上重要な情報を破棄します。 |
byte[] |
evaluateChallenge(byte[] challenge)
チャレンジデータを評価して、応答を作成します。 |
String |
getMechanismName()
この SASL クライアントの IANA 登録された機構名 (CRAM-MD5、GSSAPI など) を返します。 |
Object |
getNegotiatedProperty(String propName)
ネゴシエートされたプロパティを取り出します。 |
boolean |
hasInitialResponse()
この機構にオプションの初期応答が含まれているかどうかを調べます。 |
boolean |
isComplete()
認証交換が完了したかどうかを判定します。 |
byte[] |
unwrap(byte[] incoming,
int offset,
int len)
サーバから受信したバイト配列をラップ解除します。 |
byte[] |
wrap(byte[] outgoing,
int offset,
int len)
サーバに送信するバイト配列をラップします。 |
メソッドの詳細 |
---|
String getMechanismName()
boolean hasInitialResponse()
byte[] evaluateChallenge(byte[] challenge) throws SaslException
challenge
- サーバから送信された null 以外のチャレンジ。チャレンジ配列の長さは 0 の場合もある
SaslException
- チャレンジの処理時または応答の作成時にエラーが発生した場合boolean isComplete()
byte[] unwrap(byte[] incoming, int offset, int len) throws SaslException
incoming は、長さを表す最初の 4 つのオクテットフィールドを除く、 RFC 2222 に定義された SASL バッファの内容です。offset と len は、incoming の使用部分を指定します。
incoming
- サーバから受信した符号化されたバイトを含む null 以外のバイト配列offset
- 使用するバイトの incoming での開始位置len
- 使用する incoming のバイト数
SaslException
- incoming を正常にラップ解除できない場合
IllegalStateException
- 認証交換が完了しなかった場合、またはネゴシエートされた保護品質に整合性も機密性も備わっていない場合byte[] wrap(byte[] outgoing, int offset, int len) throws SaslException
このメソッドの結果は、長さを表す最初の 4 つのオクテットフィールドを除く、 RFC 2222 に定義された SASL バッファの内容を構成します。offset と len は、outgoing の使用部分を指定します。
outgoing
- 符号化するバイトを含む null 以外のバイト配列offset
- 使用するバイトの outgoing での開始位置len
- 使用する outgoing のバイト数
SaslException
- outgoing を正常にラップできない場合
IllegalStateException
- 認証交換が完了しなかった場合、またはネゴシエートされた保護品質に整合性も機密性も備わっていない場合Object getNegotiatedProperty(String propName)
propName
- null 以外のプロパティ名
IllegalStateException
- この認証交換が完了しなかった場合void dispose() throws SaslException
SaslException
- リソースを破棄しているときに問題が発生した場合
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。