Apache HttpPost, использующий HttpClient с заголовком авторизации, всегда возвращает 401 из IIS 10. ⇐ JAVA
Apache HttpPost, использующий HttpClient с заголовком авторизации, всегда возвращает 401 из IIS 10.
Я пытаюсь вызвать REST к веб-API, на котором работает IIS 10.0, из клиента Java. Я использую
[*]org.apache.http.client.HttpClient [*]org.apache.http.client.methods.HttpGet [*]org.apache.http.client.methods.HttpPost
Вот как я настраиваю запрос:
... httpclient = HttpClients.custom() .setDefaultRequestConfig(RequestConfig.custom() .setCookieSpec(CookieSpecs.STANDARD).build()) .строить(); HttpPost httppost = новый HttpPost(endpoint.getHost()); for(Заголовок заголовка: endpoint.getHeaders()){ httppost.setHeader(header.getKey(), header.getValue()); } StringEntity stringentity = новый StringEntity(полезная нагрузка, HTTP.UTF_8); httppost.setEntity(строга); // записываем запрос на консоль logPostRequestDetails (httppost); ответ = httpclient.execute(httppost); ... частный недействительный logPostRequestDetails (сообщение HttpPost) { System.out.println("URI: " + post.getURI()); // Заголовки журналов System.out.println("Заголовки:"); org.apache.http.Header[] заголовки = post.getAllHeaders(); for (org.apache.http.Header заголовок: заголовки) { System.out.println(header.getName() + ": " + header.getValue()); } // Регистрируем тело запроса если (post.getEntity() != ноль) { пытаться { System.out.println("Тело запроса: " + EntityUtils.toString(post.getEntity())); } catch (IOException e) { System.out.println("Тело запроса на регистрацию ошибок: " + e.getMessage()); } } } где консоль подтверждает наличие заголовка Authorization:
Авторизация: носитель [JWT-УДАЛЕНО] Но всегда сталкиваюсь с ошибкой 401:
[HttpResponseProxy{HTTP/1.1 401 Несанкционировано [Кодирование передачи: фрагментированное, Сервер: Microsoft-IIS/10.0, WWW-аутентификация: ошибка носителя = "invalid_token", X-Powered-By: ASP.NET, Strict-Transport-Security: max-age=31536000, Дата: пятница, 1 марта 2024 г., 17:39:29 GMT] ResponseEntityProxy{[Chunked: true]}}] Токен проверен действительным, поскольку я могу успешно использовать его с POSTMAN и cURL, а также с Apache HttpUrlConnection в Java . Это исключение генерируется только при использовании устаревшего HttpClient.
Я пробовал кодировать JWT base64, результат тот же.
Этот же HttpClient работает с Jira, когда я кодирую JWT base64.
Что мне не хватает? Пожалуйста, сообщите.
Та же проблема с HttpGet.
Я просмотрел другие сообщения SO по этому вопросу, но безрезультатно:
[*]Токен носителя авторизации в HttpClient [*]Заголовок аутентификации HttpClient не отправляется [*]HttpClient не принимает заголовки авторизации (401 несанкционировано) [*]Атрибут Authorize всегда возвращает 401.
Я пытаюсь вызвать REST к веб-API, на котором работает IIS 10.0, из клиента Java. Я использую
[*]org.apache.http.client.HttpClient [*]org.apache.http.client.methods.HttpGet [*]org.apache.http.client.methods.HttpPost
Вот как я настраиваю запрос:
... httpclient = HttpClients.custom() .setDefaultRequestConfig(RequestConfig.custom() .setCookieSpec(CookieSpecs.STANDARD).build()) .строить(); HttpPost httppost = новый HttpPost(endpoint.getHost()); for(Заголовок заголовка: endpoint.getHeaders()){ httppost.setHeader(header.getKey(), header.getValue()); } StringEntity stringentity = новый StringEntity(полезная нагрузка, HTTP.UTF_8); httppost.setEntity(строга); // записываем запрос на консоль logPostRequestDetails (httppost); ответ = httpclient.execute(httppost); ... частный недействительный logPostRequestDetails (сообщение HttpPost) { System.out.println("URI: " + post.getURI()); // Заголовки журналов System.out.println("Заголовки:"); org.apache.http.Header[] заголовки = post.getAllHeaders(); for (org.apache.http.Header заголовок: заголовки) { System.out.println(header.getName() + ": " + header.getValue()); } // Регистрируем тело запроса если (post.getEntity() != ноль) { пытаться { System.out.println("Тело запроса: " + EntityUtils.toString(post.getEntity())); } catch (IOException e) { System.out.println("Тело запроса на регистрацию ошибок: " + e.getMessage()); } } } где консоль подтверждает наличие заголовка Authorization:
Авторизация: носитель [JWT-УДАЛЕНО] Но всегда сталкиваюсь с ошибкой 401:
[HttpResponseProxy{HTTP/1.1 401 Несанкционировано [Кодирование передачи: фрагментированное, Сервер: Microsoft-IIS/10.0, WWW-аутентификация: ошибка носителя = "invalid_token", X-Powered-By: ASP.NET, Strict-Transport-Security: max-age=31536000, Дата: пятница, 1 марта 2024 г., 17:39:29 GMT] ResponseEntityProxy{[Chunked: true]}}] Токен проверен действительным, поскольку я могу успешно использовать его с POSTMAN и cURL, а также с Apache HttpUrlConnection в Java . Это исключение генерируется только при использовании устаревшего HttpClient.
Я пробовал кодировать JWT base64, результат тот же.
Этот же HttpClient работает с Jira, когда я кодирую JWT base64.
Что мне не хватает? Пожалуйста, сообщите.
Та же проблема с HttpGet.
Я просмотрел другие сообщения SO по этому вопросу, но безрезультатно:
[*]Токен носителя авторизации в HttpClient [*]Заголовок аутентификации HttpClient не отправляется [*]HttpClient не принимает заголовки авторизации (401 несанкционировано) [*]Атрибут Authorize всегда возвращает 401.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
HttpClient не принимает заголовки авторизации (401 неавторизованный)?
Anonymous » » в форуме Android - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-