0

Когда я пытаюсь подключиться к веб-серверу с помощью аутентификации DIGEST, соединение будет отклонено (401, Not Authenticated). Ответы я мог бы найти связанные с этой темой, где в основном устаревшей, поэтому я хотел бы начать дискуссию о решении этой проблемы с текущей версией:Apache HttpClient DigestAuth - 401, неавторизованный. Но учетные данные в порядке

<dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <version>4.4.1</version> 
     </dependency> 

Следующий код позволяет задать учетные данные и подключиться к моему целевому остальному мусора с использованием Apache HttpClient. The credentials I am using are correct, так что должно быть что-то не так с моей конфигурацией учетных данных или тем, как я использую HTTPClient.

HttpGet getArticles = new HttpGet("http://myurl.xx/api/"); 

    Registry<AuthSchemeProvider> authSchemeRegistry = 
      RegistryBuilder.<AuthSchemeProvider>create().register(AuthSchemes.DIGEST,new DigestSchemeFactory()).build(); 
    CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); 
    credentialsProvider.setCredentials(
      new AuthScope("http://myurl.xx/api/",80), 
      new UsernamePasswordCredentials(username,pw)); 

    CloseableHttpClient client = HttpClients.custom() 
      .setDefaultAuthSchemeRegistry(authSchemeRegistry) 
      .setDefaultCredentialsProvider(credentialsProvider).build(); 

    try { 
     CloseableHttpResponse response = client.execute(getArticles); 
     logger.info(String.valueOf(response.getStatusLine().getStatusCode())); 
    } catch (IOException e) { 
     logger.error(e.getMessage(),e); 
    }finally { 
     try { 
      client.close(); 
     } catch (IOException e) { 
      logger.error(e.getMessage(),e); 
     } 
    } 

Это вернет

HTTP/1.1 401 Unauthorized 

Я не эксперт с дайджестом Идентом, но я знаю, что вы должны соединить два раза, потому что сервера будут посылать вам некоторые данные авторизации в первую очередь. Но я считаю, что, когда я регистрирую DIGEST как AuthentificationScheme, это должно обрабатываться автоматически?

Когда я проверяю клиента client.authSchemeRegistry говорит:

{[email protected]} 

Так он успешно зарегистрирован.

ответ

1

Это может быть или не быть причиной, но область полномочий неверна. Конструктор AuthScope принимает имя хоста, а не URL-адрес в качестве первого параметра.

credentialsProvider.setCredentials(
     new AuthScope("myurl.xx",80), 
     new UsernamePasswordCredentials(username,pw)); 
+0

Вы верны. Объем не был правильным. Я изменил его, и теперь я получаю OK 200. Спасибо :). – Goot

+0

Это также работает, если я устанавливаю прокси для этой цели? – heaphach

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