Авторизация с помощью логина/пароля происходит через обработку PULL-запроса к серверу.

В коде приложения установку обработчиков разных видов web-запросов на авторизацию к серверу можно найти в функции:

void HttpServer::configure( server::ManagerApplication &app) 

находящемся в файле исходного кода /src/Http/HttpServer.cpp.

Для всех типов web-запросов обработчики вызываются одной и той же функцией, указанной выше, которая вызывает соответствующий метод обработчика Controller::handle из интерфейса class Controller.

Например, для POST-запросов вызывается метод:

CommonPostController::handle( const http::Request &request, http::Response &response )

В случае OAuth-авторизации через Polygit используется GET-запрос вида:

 https://polygit.polymatica.ru/oauth/authorize?response_type=code&client_id=cb5916b...&redirect_uri=http://localhost:8080/api/v2/login/oauth2/redirect/gitlab

Этот GET-запрос обрабатывается той же самой функцией, указанной выше, но следом выполняется перенаправление на страницу Gitlab. В браузере появляется окошко с вопросом "Authorize analytics to use your account?" и кнопкой Authorize.

При нажатии на кнопку приходит уже новый POST-запрос, который снова попадает в вышеупомянутый общий обработчик, из которого вызывается вызывается обработчик RedirectGetController::handle

Обработчик извлекает из запроса значение authorization_code, с помощью которого уже можно получить токен аутентификации (переменная server::oauth2::Token token). 

Для логирования события аутентификации из токена, в свою очередь, получается объект UserDescription:

const server::oauth2::UserDescription user = authenticator.get_user_description( token.access_token, token.id_token )

в котором есть поле user_login, значение которого и выводится в лог.

  • Нет меток