1

WS-Security で保護された WS エンドポイントを作成しました。クライアント認証は、PasswordDigest パスワード タイプの UsernameToken に基づいています (残念ながら、証明書ベースの認証はオプションではありません。レガシー クライアントがいくつかあります)。

SOAP リクエストの例を次に示します。

<soapenv:Envelope>
    <soapenv:Header>
        <wsse:Security>
            <wsse:UsernameToken>
                <wsse:Username>XXX</wsse:Username>
                <wsse:Password>vCsshCTkiz07lpCZXVYgwXPU7n4=</wsse:Password>
                <wsse:Nonce>fsf9Vc2YNErZy4Cc2wcYjw==</wsse:Nonce>
                <wsu:Created>2013-06-06T09:31:16.757Z</wsu:Created>
            </wsse:UsernameToken>
        </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
        <rem:start>
            <xxx>111</xxx>
        </rem:start>
    </soapenv:Body>
</soapenv:Envelope>

私が理解しているように、パスワードはBase64(SHA(Nonce + Created + ClearTextPassword))として生成されます。

CXF フレームワークに正しい平文パスワードを与えるための CXF PasswordCallback を実装しているので、ダイジェスト値を計算し、提供されたものと比較できます。

public class PasswordCallbackHandler implements CallbackHandler {

    @Override
    public void handle(final Callback[] callbacks) throws IOException, UnsupportedCallbackException {

        final WSPasswordCallback passwordCallback = (WSPasswordCallback) callbacks[0];
        passwordCallback.setPassword("cleartextpassword");

    }

}

私の懸念は、パスワード値をプレーンテキストとして設定する必要があることです。そのため、それらを (私のユースケース: データベースに) クリアテキストで保存する必要があります。

これは、この PasswordDigest シナリオで得られる最高のものだと感じていますが、より良い代替手段があるかどうかを知りたいと思っています...

ありがとう!

M.

4

0 に答える 0