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 PasswordCallback 为 CXF 框架提供正确的明文密码,因此它可以计算其摘要值并与提供的值进行比较。

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