|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
public interface SaslClient
SASL 認証をクライアントとして実行します。
プロトコルライブラリ (LDAP ライブラリなど) は、特定の SASL 機構によって定義された認証を実行するために、このクラスのインスタンスを取得します。SaslClient インスタンスに対するメソッドを呼び出すと、チャレンジが処理され、SaslClient によって実装された SASL 機構に従って応答が作成されます。認証が処理されるときに、SASL クライアントの認証交換の状態が暗号化されます。
次に、LDAP ライブラリがどのように SaslClient を使用するかの例を示します。まず、SaslClient のインスタンスを取得します。
SaslClient sc = Sasl.createSaslClient(mechanisms,
authorizationId, protocol, serverName, props, callbackHandler);
これで、クライアントを認証に使用できます。たとえば、LDAP ライブラリは次のようにクライアントを使用できます。
// 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);
}
}
機構に初期応答が含まれている場合、ライブラリは空のチャレンジで evaluateChallenge() を呼び出し、初期応答を取得します。IMAP4 などのプロトコルは、サーバーへの最初の認証コマンドを持つ初期応答が含まれていないため、最初に hasInitialResponse() または evaluateChallenge() を呼び出さないで認証を開始します。サーバーが認証コマンドに応答すると、初期チャレンジが送信されます。クライアントが最初にデータを送信する SASL 機構では、サーバーはデータを含まないチャレンジを発行しておかなければいけません。それによって、空のチャレンジによる evaluateChallenge() への呼び出しがクライアントで行われます。
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 Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。