JavaTM Platform
Standard Ed. 6

javax.security.sasl
インタフェース SaslServer


public interface SaslServer

SASL 認証をサーバーとして実行します。

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);
    }
 }

導入されたバージョン:
1.5
関連項目:
Sasl, SaslServerFactory

メソッドの概要
 void dispose()
          SaslServer が使用しているシステムリソースまたはセキュリティー上重要な情報を破棄します。
 byte[] evaluateResponse(byte[] response)
          応答データを評価し、チャレンジを作成します。
 String getAuthorizationID()
          このセッションのクライアントに有効な承認 ID を報告します。
 String getMechanismName()
          この SASL サーバーの IANA 登録された機構名 (CRAM-MD5、GSSAPI など) を返します。
 Object getNegotiatedProperty(String propName)
          ネゴシエートされたプロパティーを取り出します。
 boolean isComplete()
          認証交換が完了したかどうかを判定します。
 byte[] unwrap(byte[] incoming, int offset, int len)
          クライアントから受信したバイト配列をラップ解除します。
 byte[] wrap(byte[] outgoing, int offset, int len)
          クライアントに送信するバイト配列をラップします。
 

メソッドの詳細

getMechanismName

String getMechanismName()
この SASL サーバーの IANA 登録された機構名 (CRAM-MD5、GSSAPI など) を返します。

戻り値:
IANA 登録された機構名を表す null 以外の文字列

evaluateResponse

byte[] evaluateResponse(byte[] response)
                        throws SaslException
応答データを評価し、チャレンジを作成します。 認証プロセス時にクライアントからの応答を受信すると、クライアントに送信する次の適切なチャレンジを準備するために、このメソッドが呼び出されます。認証に成功し、これ以上クライアントに送信するチャレンジデータがない場合、チャレンジは null になります。チャレンジをクライアントに送信して認証を続行する必要がある場合、または認証に成功したが、チャレンジデータをクライアントで処理する必要がある場合は null 以外の値になります。 evaluateResponse() を呼び出したあとは、クライアントからの応答がさらに必要かどうかを判定するために isComplete() が呼び出されます。

パラメータ:
response - クライアントから送信される null 以外の応答。 空の場合もある
戻り値:
クライアントに送信するチャレンジ (null の場合もある)。 認証に成功し、これ以上クライアントに送信するチャレンジデータがない場合は null になる
例外:
SaslException - 応答の処理時またはチャレンジの作成時にエラーが発生した場合

isComplete

boolean isComplete()
認証交換が完了したかどうかを判定します。通常は、evaluateResponse() を呼び出したあとで、認証が正常に完了したか、続行する必要があるかを判定するために呼び出されます。

戻り値:
認証交換が完了した場合は true、そうでない場合は false

getAuthorizationID

String getAuthorizationID()
このセッションのクライアントに有効な承認 ID を報告します。このメソッドは、isComplete() が true を返した場合にのみ呼び出すことができます。

戻り値:
クライアントの承認 ID
例外:
IllegalStateException - この認証セッションが完了しなかった場合

unwrap

byte[] unwrap(byte[] incoming,
              int offset,
              int len)
              throws SaslException
クライアントから受信したバイト配列をラップ解除します。このメソッドは、認証交換が完了した (isComplete() が true を返した) あとで、認証交換の保護品質としてネゴシエートされた整合性または機密性が備わっている場合にのみ呼び出されます。 そうでない場合は、IllegalStateException がスローされます。

incoming は、長さを表す最初の 4 つのオクテットフィールドを除く、 RFC 2222 に定義された SASL バッファーの内容です。 offsetlen は、incoming の使用部分を指定します。

パラメータ:
incoming - クライアントから受信した符号化されたバイトを含む null 以外のバイト配列
offset - 使用するバイトの incoming での開始位置
len - 使用する incoming のバイト数
戻り値:
復号化されたバイトを含む null 以外のバイト配列
例外:
SaslException - incoming を正常にラップ解除できない場合
IllegalStateException - 認証交換が完了しなかった場合、またはネゴシエートされた保護品質に整合性も機密性も備わっていない場合

wrap

byte[] wrap(byte[] outgoing,
            int offset,
            int len)
            throws SaslException
クライアントに送信するバイト配列をラップします。このメソッドは、認証交換が完了した (isComplete() が true を返した) あとで、認証交換の保護品質としてネゴシエートされた整合性または機密性が備わっている場合にのみ呼び出されます。 そうでない場合は、SaslException がスローされます。

このメソッドの結果は、長さを表す最初の 4 つのオクテットフィールドを除く、 RFC 2222 に定義された SASL バッファーの内容を構成します。 offsetlen は、outgoing の使用部分を指定します。

パラメータ:
outgoing - 符号化するバイトを含む null 以外のバイト配列
offset - 使用するバイトの outgoing での開始位置
len - 使用する outgoing のバイト数
戻り値:
符号化されたバイトを含む null 以外のバイト配列
例外:
SaslException - outgoing を正常にラップできない場合
IllegalStateException - 認証交換が完了しなかった場合、またはネゴシエートされた保護品質に整合性も機密性も備わっていない場合

getNegotiatedProperty

Object getNegotiatedProperty(String propName)
ネゴシエートされたプロパティーを取り出します。このメソッドは、認証交換が完了した (isComplete() が true を返した) あとでのみ呼び出すことができます。 そうでない場合は、IllegalStateException がスローされます。

パラメータ:
propName - プロパティー
戻り値:
ネゴシエートされたプロパティーの値。null の場合は、プロパティーがネゴシエートされなかったか、この機構に適用できない
例外:
IllegalStateException - この認証交換が完了しなかった場合

dispose

void dispose()
             throws SaslException
SaslServer が使用しているシステムリソースまたはセキュリティー上重要な情報を破棄します。このメソッドを呼び出すと、SaslServer インスタンスが無効になります。このメソッドはべき等です。

例外:
SaslException - リソースを破棄しているときに問題が発生した場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。