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

Интерсепторы THTTPRouter: механизм авторизации в REST веб-сервисе

Delphi , Интернет и Сети , Интернет

Интерсепторы THTTPRouter позволяют реализовать механизм авторизации в REST веб-сервисе, построении на основе фреймворка FCL-WEB. В данной статье мы рассмотрим, как использовать интерсепторы для проверки bearer-токена в единственном месте, а не в каждом маршруте, и предотвращать исполнение маршрута, если токен недействителен.

Что такое интерсепторы в THTTPRouter?

Интерсепторы (interceptors) в THTTPRouter – это механизм, позволяющий перехватывать и обрабатывать запросы до или после их обработки основным маршрутом. Интерсепторы регистрируются глобально для всего роутера и могут применяться ко всем маршрутам или выборочно к определенным маршрутам.

Регистрация интерсептора для проверки bearer-токена

Для проверки bearer-токена в единственном месте мы можем зарегистрировать интерсептор, который будет выполняться перед обработкой каждого запроса. Вот пример кода на Object Pascal (Delphi), демонстрирующий регистрацию интерсептора для проверки bearer-токена:

procedure TMyApplication.DoRun;
begin
  // Регистрируем интерсептор для проверки bearer-токена
  HTTPRouter.RegisterInterceptor('auth', @DoAuthorization);
end;

function TMyApplication.DoAuthorization(aRequest: THTTPRequest; aResponse: THTTPResponse;
  var aContinue: Boolean): Boolean;
begin
  // Получаем значение bearer-токена из заголовка запроса
  var token := aRequest.Headers.Values['Authorization'];
  if token = nil then
  begin
    // Токен не найден, отправляем ответ с кодом 401 Unauthorized
    aResponse.Code := 401;
    aResponse.CodeText := 'Unauthorized';
    aResponse.SendContent;
    aContinue := False;
    Exit;
  end;

  // Проверяем валидность токена (реализация зависит от вашей системы аутентификации)
  if not ValidateToken(token) then
  begin
    // Токен недействителен, отправляем ответ с кодом 401 Unauthorized
    aResponse.Code := 401;
    aResponse.CodeText := 'Unauthorized';
    aResponse.SendContent;
    aContinue := False;
    Exit;
  end;

  // Токен валиден, продолжаем обработку запроса
  aContinue := True;
end;

В данном примере регистрируется интерсептор с именем 'auth' и функцией DoAuthorization. Функция извлекает bearer-токен из заголовка запроса и проверяет его валидность. Если токен не найден или недействителен, функция отправляет ответ с кодом 401 Unauthorized и устанавливает aContinue в False, предотвращая исполнение основного маршрута. Если токен валиден, aContinue устанавливается в True, и обработка запроса продолжается.

Альтернативное решение: использование BeforeRequest

Хотя в изначальном вопросе было указано, что BeforeRequest не может предотвратить исполнение маршрута, это не совсем верно. BeforeRequest также может использоваться для проверки bearer-токена и предотвращения исполнения маршрута, если токен недействителен. Вот пример кода, демонстрирующий использование BeforeRequest:

procedure TMyApplication.BeforeRequest(aRequest: THTTPRequest; aResponse: THTTPResponse);
begin
  // Получаем значение bearer-токена из заголовка запроса
  var token := aRequest.Headers.Values['Authorization'];
  if token = nil then
  begin
    // Токен не найден, отправляем ответ с кодом 401 Unauthorized и прерываем обработку запроса
    aResponse.Code := 401;
    aResponse.CodeText := 'Unauthorized';
    aResponse.SendContent;
    Exit;
  end;

  // Проверяем валидность токена (реализация зависит от вашей системы аутентификации)
  if not ValidateToken(token) then
  begin
    // Токен недействителен, отправляем ответ с кодом 401 Unauthorized и прерываем обработку запроса
    aResponse.Code := 401;
    aResponse.CodeText := 'Unauthorized';
    aResponse.SendContent;
    Exit;
  end;
end;

В данном примере BeforeRequest используется для извлечения bearer-токена из заголовка запроса и проверки его валидности. Если токен не найден или недействителен, ответ с кодом 401 Unauthorized отправляется, и обработка запроса прерывается с помощью инструкции Exit.

Заключение

Интерсепторы THTTPRouter предоставляют гибкий механизм для настройки и фильтрации запросов в REST веб-сервисе, построенном на основе фреймворка FCL-WEB. Мы рассмотрели два подхода к проверке bearer-токена в единственном месте: использование интерсепторов и BeforeRequest. Оба подхода позволяют предотвращать исполнение маршрута, если токен недействителен. Выбор между интерсепторами и BeforeRequest зависит от конкретных потребностей вашего проекта и личных предпочтений.

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

Интерсепторы в THTTPRouter — это механизм перехвата и обработки запросов перед или после их обработки основным маршрутом, позволяющий реализовать механизм авторизации в REST веб-сервисе, построенном на основе фреймворка FCL-WEB.


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

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




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


:: Главная :: Интернет ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 23:09:54/0.0035979747772217/0