public interface SaslServer
SASL認証をサーバーとして実行します。
LDAPサーバーのようなサーバーは、特定のSASLメカニズムによって定義された認証を実行するために、このクラスのインスタンスを取得します。 SaslServer
インスタンスに対するメソッドを呼び出すと、SaslServer
によって実装されたSASLメカニズムに従ってチャレンジが作成されます。 認証が処理されるときに、SASLサーバーの認証交換の状態が暗号化されます。
次に、LDAPサーバーがどのようにSaslServer
を使用するかの例を示します。 まず、クライアントによって要求されたSASLメカニズムのSaslServer
インスタンスを取得します。
これで、サーバーを認証に使用できます。 たとえば、LDAPサーバーがSASLメカニズムの名前と初期応答(オプション)を含むLDAP BIND要求を受信したとします。 このとき、サーバーを次のように使用できます。SaslServer ss = Sasl.createSaslServer(mechanism, "ldap", myFQDN, props, callbackHandler);
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登録されたメカニズム名を返します。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バッファの内容です。offset
とlen
は、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バッファの内容を構成します。
offset
とlen
は、outgoing
の使用部分を指定します。- パラメータ:
outgoing
- エンコードするバイトを含むnull以外のバイト配列。offset
- 使用するバイトのoutgoing
での開始位置。len
- 使用するoutgoing
のバイト数。- 戻り値:
- エンコードされたバイトを含むnull以外のバイト配列。
- 例外:
SaslException
-outgoing
を正常にラップできない場合。IllegalStateException
- 認証交換が完了しなかった場合、またはネゴシエートされた保護品質に整合性も機密性も備わっていない場合。
-
getNegotiatedProperty
ネゴシエートされたプロパティを取り出します。 このメソッドは、認証交換が完了した(isComplete()
がtrueを返した)後でのみ呼び出すことができます。そうでない場合は、IllegalStateException
がスローされます。Sasl
クラスには、いくつかのよく知られたプロパティ名(たとえば、Sasl.QOP
)が含まれています。 SASLプロバイダは、ベンダーおよび/またはメカニズムに固有の他のプロパティをサポートできます。- パラメータ:
propName
- プロパティ- 戻り値:
- ネゴシエートされたプロパティの値。 nullの場合は、プロパティがネゴシエートされなかったか、このメカニズムに適用できない。
- 例外:
IllegalStateException
- この認証交換が完了しなかった場合
-
dispose
void dispose() throws SaslExceptionSaslServerが使用しているシステム・リソースまたはセキュリティ上重要な情報を破棄します。 このメソッドを呼び出すと、SaslServerインスタンスが無効になります。 このメソッドはべき等です。- 例外:
SaslException
- リソースを破棄しているときに問題が発生した場合。
-