2015-09-04 5 views
2

Я пытаюсь использовать веб-службу, которая использует режим дайджест-пароля, и у меня есть эти функции в моем приложении 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); 
    } 
+0

Какие веб-сервис является это? –

+0

На самом деле я не могу сказать - это конфиденциально ... Я собираюсь от вашего ответа здесь, что я должен заручиться поддержкой их технической команды, потому что такого рода вещи не очень общие, чтобы получить помощь в Интернете. Но если это так, то почему SoapUI может сделать это без проблем? – Amy

+0

Я действительно не могу сказать; Я бы поговорил с их специалистами. Просто, чтобы быть уверенным, вы намеренно удваиваете хэширование своего nonce, правильно? И что нонс, который вы получаете, находится в миллисекундах с эпохи? –

ответ

2

Решение было заменить строку sha1.update(nonce.getBytes("UTF-8")); с sha1.update(Base64.decodeBase64(nonce));

 Смежные вопросы

  • Нет связанных вопросов^_^