Я пытаюсь разобраться с реализацией WS-безопасности CXF (usernametoken). Я сделал все, как сказано на http://cxf.apache.org/docs/ws-security.html . Мой PasswordCallbackHandler, похоже, работает, но меня беспокоит его часть:
if (pc.getIdentifier().equals("joe")) {
// set the password on the callback. This will be compared to the
// password which was sent from the client.
pc.setPassword("password");
}
как сказано
Обратите внимание, что до CXF 2.3.x включительно проверка пароля для особого случая пароля в виде простого текста (или любой другой, но неизвестный тип пароля) делегируется классу обратного вызова, см. org.apache.ws.security.processor.UsernameTokenProcessor # handleUsernameToken () метод javadoc проекта WSS4J. В этом случае ServerPasswordCallback должен быть примерно таким:
поэтому до cxf 2.3.x это было сделано так
if (pc.getIdentifer().equals("joe") {
if (!pc.getPassword().equals("password")) {
throw new IOException("wrong password");
}
}
Моя проблема: я не хочу использовать pc.setPassword ("plainTextPassword") так как хочу хранить его на любом ресурсе. Этот дизайн до 2.3.x позволил бы мне сделать это, поскольку я мог бы зашифровать его вручную. Есть ли способы установить зашифрованный пароль в обратном вызове или выполнить аутентификацию с помощью токена пользователя для сохраненных зашифрованных паролей?
Я использую cxf 2.5.x