7.4. 受信される認証情報の認証
概要
サーバー側で、コールバックハンドラーを Apache CXF ランタイムで登録することで、受信したクレデンシャルが認証されていることを確認できます。独自のカスタムコードを作成して認証情報の検証を実行するか、サードパーティーのエンタープライズセキュリティーシステム (LDAP サーバーなど) と統合するコールバックハンドラーを実装できます。
Blueprint XML でのサーバーコールバックハンドラーの設定
クライアントから受信した UsernameToken
クレデンシャルを検証するサーバーコールバックハンドラーを設定するには、以下のようにサーバーの Blueprint XML 設定で security.callback-handler
プロパティーを設定します。
<beans ... > <jaxws:endpoint id="UserNameOverTransport" address="https://localhost:9001/UserNameOverTransport" serviceName="interop:PingService10" endpointName="interop:UserNameOverTransport_IPingService" implementor="interop.server.UserNameOverTransport" depends-on="tls-settings"> <jaxws:properties> <entry key="security.username" value="Alice"/> <entry key="security.callback-handler" value="interop.client.UTPasswordCallback"/> </jaxws:properties> </jaxws:endpoint> ... </beans>
上記の例では、コールバックハンドラーは UTPasswordCallback
クラスによって実装されます。
パスワードを確認するためのコールバックハンドラーの実装
サーバー側でパスワードをチェックするコールバックハンドラーを実装するには、javax.security.auth.callback.CallbackHandler
インターフェイスを実装します。サーバーに CallbackHandler
インターフェイスを実装する一般的な方法は、クライアントに CallbackHandler
を実装するのと類似しています。ただし、サーバー側で返されたパスワードの解釈は異なります。クライアントの資格情報を確認するために、コールバックハンドラーからのパスワードが、受信したクライアントのパスワードと比較されます。
たとえば、次のようなサンプル実装を使用できます。例7.2「UsernameToken パスワードのコールバックハンドラー」 サーバー側でパスワードを取得します。サーバー側では、WSS4J ランタイムは、コールバックから取得したパスワードを、受信したクライアント資格情報のパスワードと比較します。2 つのパスワードが一致する場合、資格情報は正常に検証されます。
サーバーコールバックハンドラーのより現実的な実装には、セキュリティーデータの格納に使用されるサードパーティーデータベースとの統合 (たとえば、LDAP サーバーとの統合) の作成が含まれます。