Я пытаюсь использовать веб-службу, которая использует режим дайджест-пароля, и у меня есть эти функции в моем приложении Java для генерации случайного времени, даты создания и пароля. Я не могу пройти проверку подлинности с ошибкой аутентификации, и в документации не слишком ясно, хотят ли они SHA-1 или MD5, как это упоминается обоим. Я пробовал MD5 вместо SHA-1, и я получаю тот же результат. Мне удалось заставить запросы работать с помощью теста на SoapUI, но я понятия не имею, как это приложение генерирует дайджест/nonce. Любая помощь приветствуется.Нужна помощь в создании действительного пользователя nonce
Вот код, я использую для создания одноразового номера и пароля переваривать:
private static SOAPMessage createSOAPRequest() throws Exception
{
String password = "FakePassword";
String nonce = generateNonce();
System.out.println("Nonce = " + nonce);
DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date today = Calendar.getInstance().getTime();
String created = dateFormatter.format(today);
System.out.println("Created = " + created);
String passwordDigest = buildPasswordDigest(nonce, created, password);
System.out.println("Password Digest = " + passwordDigest);
}
private static String buildPasswordDigest(String nonce, String created, String password) throws NoSuchAlgorithmException, UnsupportedEncodingException
{
MessageDigest sha1;
String passwordDigest = null;
try
{
sha1 = MessageDigest.getInstance("SHA-1");
sha1.update(Base64.decodeBase64(nonce));
sha1.update(created.getBytes("UTF-8"));
passwordDigest = new String(Base64.encodeBase64(sha1.digest(password.getBytes("UTF-8"))));
sha1.reset();
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
return passwordDigest;
}
private static String generateNonce() throws NoSuchAlgorithmException, NoSuchProviderException, UnsupportedEncodingException
{
String dateTimeString = Long.toString(new Date().getTime());
byte[] nonceByte = dateTimeString.getBytes();
return Base64.encodeBase64String(nonceByte);
}
Какие веб-сервис является это? –
На самом деле я не могу сказать - это конфиденциально ... Я собираюсь от вашего ответа здесь, что я должен заручиться поддержкой их технической команды, потому что такого рода вещи не очень общие, чтобы получить помощь в Интернете. Но если это так, то почему SoapUI может сделать это без проблем? – Amy
Я действительно не могу сказать; Я бы поговорил с их специалистами. Просто, чтобы быть уверенным, вы намеренно удваиваете хэширование своего nonce, правильно? И что нонс, который вы получаете, находится в миллисекундах с эпохи? –