モジュール java.security.sasl
パッケージ 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
    関連項目:
    SaslSaslServerFactory
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 抽象メソッド 
      修飾子と型 メソッド 説明
      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)
      クライアントに送信するバイト配列をラップします。
    • メソッドの詳細

      • 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がスローされます。

        Saslクラスには、いくつかのよく知られたプロパティ名(たとえば、Sasl.QOP)が含まれています。 SASLプロバイダは、ベンダーおよび/またはメカニズムに固有の他のプロパティをサポートできます。

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

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