public interface SaslServer
LDAP サーバーのようなサーバーは、特定の SASL メカニズムによって定義された認証を実行するために、このクラスのインスタンスを取得します。SaslServer インスタンスに対するメソッドを呼び出すと、SaslServer によって実装された SASL メカニズムに従ってチャレンジが作成されます。認証が処理されるときに、SASL サーバーの認証交換の状態が暗号化されます。
次に、LDAP サーバーがどのように SaslServer を使用するかの例を示します。まず、クライアントによって要求された SASL メカニズムの SaslServer インスタンスを取得します。
SaslServer ss = Sasl.createSaslServer(mechanism,
"ldap", myFQDN, props, callbackHandler);
これで、サーバーを認証に使用できます。たとえば、LDAP サーバーが SASL メカニズムの名前と初期応答 (省略可能) を含む LDAP BIND 要求を受信したとすると、サーバーを次のように使用できます。
while (!ss.isComplete()) {
try {
byte[] challenge = ss.evaluateResponse(response);
if (ss.isComplete()) {
status = ldap.sendBindResponse(mechanism, challenge, SUCCESS);
} else {
status = ldap.sendBindResponse(mechanism, challenge,
SASL_BIND_IN_PROGRESS);
response = ldap.readBindRequest();
}
} catch (SaslException e) {
status = ldap.sendErrorResponse(e);
break;
}
}
if (ss.isComplete() && status == SUCCESS) {
String qop = (String) sc.getNegotiatedProperty(Sasl.QOP);
if (qop != null
&& (qop.equalsIgnoreCase("auth-int")
|| qop.equalsIgnoreCase("auth-conf"))) {
// Use SaslServer.wrap() and SaslServer.unwrap() for future
// communication with client
ldap.in = new SecureInputStream(ss, ldap.in);
ldap.out = new SecureOutputStream(ss, ldap.out);
}
}
Sasl、SaslServerFactory| 修飾子と型 | メソッドと説明 |
|---|---|
void |
dispose()
SaslServer が使用しているシステムリソースまたはセキュリティー上重要な情報を破棄します。
|
byte[] |
evaluateResponse(byte[] response)
応答データを評価し、チャレンジを作成します。
|
String |
getAuthorizationID()
このセッションのクライアントに有効な承認 ID を報告します。
|
String |
getMechanismName()
この SASL サーバーの IANA 登録されたメカニズム名を返します。
|
Object |
getNegotiatedProperty(String propName)
ネゴシエートされたプロパティーを取り出します。
|
boolean |
isComplete()
認証交換が完了したかどうかを判定します。
|
byte[] |
unwrap(byte[] incoming, int offset, int len)
クライアントから受信したバイト配列をラップ解除します。
|
byte[] |
wrap(byte[] outgoing, int offset, int len)
クライアントに送信するバイト配列をラップします。
|
String getMechanismName()
byte[] evaluateResponse(byte[] response)
throws SaslException
response - クライアントから送信される null 以外の応答 (空の場合もある)。SaslException - 応答の処理時またはチャレンジの作成時にエラーが発生した場合。boolean isComplete()
String getAuthorizationID()
IllegalStateException - この認証セッションが完了しなかった場合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 - プロパティーIllegalStateException - この認証交換が完了しなかった場合void dispose()
throws SaslException
SaslException - リソースを破棄しているときに問題が発生した場合。 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.