Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как исправить ошибку 401 Unauthorized при использовании API Tableau для закрытия сессии в Delphi

Delphi , Синтаксис , API реализация

В процессе работы с API сервера Tableau для бета-версии 2018.2, разработчики столкнулись с проблемой, связанной с закрытием сессии. Для этого предусмотрен RESTful API call, который осуществляет выход из сессии, используя POST-запрос с указанием учетных данных пользователя, после чего сервер возвращает токен для дальнейшего использования.

Правильным протоколом безопасности при завершении сессии является отправка запроса на выход из системы, аналогично процессу аутентификации, с использованием строки кастомного аутентификационного заголовка, включающего токен. Однако, основное отличие запроса на выход из системы заключается в том, что данные для этого запроса должны быть пустыми (nil/null). Несмотря на то, что документация API не упоминает это, пример использования CURL подразумевает, что отправка POST-запроса без данных является нормальной практикой:

curl "http://MY-SERVER/api/3.0/auth/signout" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"

Попытки выполнения запроса с использованием компонента TIdHTTP и передачи пустого TStringStream или TStringList в качестве параметров POST-запроса приводят к исключению 'HTTP/1.1 401 Unauthorized'.

Также, использование TWebBrowser интерфейса приводит к нежелательному запуску Internet Explorer с отображением сообщения о том, что навигация отменена, или же к отображению страницы с ошибкой 401, указывающей на неверные учетные данные.

Проблема была решена после того, как в коде была добавлена строка с аутентификационной информацией и установлено свойство http.Connection в значение 'close'. Это позволило успешно закрыть сессию.

Шаги для решения проблемы:

  1. Убедитесь, что аутентификационный заголовок правильно добавлен в запрос.
  2. Установите свойство http.Connection в значение 'close' для корректной обработки запроса сервером.

Пример кода на Object Pascal (Delphi):

tss := TStringStream.Create('');
try
  http.Request.CustomHeaders.AddValue('X-Tableau-Auth', FToken);
  http.Connection := 'close';
  http.Post('http://<myserver>/api/3.0/auth/signout', tss);
finally
  tss.Free;
end;

Важно помнить, что если вы не отправляете никаких данных в теле запроса, нет необходимости отправлять заголовок Content-Type. Также, если вы не используете сжатие данных, заголовок Content-Encoding также не требуется.

Следуя этим шагам, вы сможете успешно закрыть сессию в Tableau Server API, используя Delphi.

Создано по материалам из источника по ссылке.

Проблема заключается в необходимости корректного выполнения POST-запроса для закрытия сессии в API сервера Tableau через Delphi, с учетом правильного использования аутентификационного заголовка и свойства `Connection` компонента `TIdHTTP`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: API реализация ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 11:39:35/0.0052430629730225/1