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 サーバーとの統合) の作成が含まれます。