.. _gs3_service_authentication: Аутентификация в HTTP сервисах =============================== Для всех HTTP-сервисов используется HTTP-аутентификация. В каждый HTTP-запрос клиент должен добавлять аутентификационные данные. Доступны :ref:`Basic` и :ref:`Bearer` аутентификация. .. seealso:: :ref:`gs3_http_services`, :java:type:`CoreAuthProvider` .. _gs3_authentication_basic: Basic ------------------------ При `Basic`-аутентификации, клиент должен передать в запросе: - Имя пользователя - Пароль - Имя базы Имя пользователя и пароль передаются через HTTP-заголовок: - ``Authorization`` со значенеим ``Basic {Base64Cred}`` где: ``{Base64Cred}`` - строка ``user:password``, кодированная в `Base64`. Имя базы может быть передано через (в порядке приоритета): - Сегмент строки адреса. Пример: ``http://server/{DATABASE}/`` - HTTP-загловок ``Database`` со значением ``{DATABASE}`` - HTTP-параметр ``Database`` со значением ``{DATABASE}``. Пример: ``http://server/?Database={DATABASE}`` где ``{DATABASE}`` - имя базы данных. .. note:: Если имя базы не передано ни одним из описанных способов, будет произведена попытка аутентификации с использованием имени базы по-умолчанию. База по умолчанию определяется из конфигурационного файла `global3.config.xml` (в порядке приоритета). - Значение атрибута ```` - Значение атрибута ```` первой базы в списке конфигураций ```` Проверка учётных данных для Postgres решения выполняется в :term:`GTK`, вызовом :java:type:`CoreAuthProvider.login()`. .. _gs3_authentication_bearer: Bearer ------------------------ При `Bearer`-аутентификации, клиент должен передать в запросе: - :term:`Токен аутентификации` - Имя базы Токен аутентификации передаётся через HTTP-заголовок: - ``Authorization`` со значенеим ``Bearer {Token}`` где: ``{Token}`` - строка с токеном аутентификации. .. note:: Токен может быть передан альтернативными способами: - Через Cookie с именем ``access_token`` - Через HTTP-параметр с именем ``access_token`` Имя базы может быть передано через (в порядке уменьшения приоритета): - Сегмент строки адреса. Пример: ``http://server/{DATABASE}/`` - HTTP-загловок ``Database`` со значением ``{DATABASE}`` - HTTP-параметр ``Database`` со значением ``{DATABASE}``. Пример: ``http://server/?Database={DATABASE}`` где ``{DATABASE}`` - имя базы данных. .. note:: Если имя базы не передано ни одним из описанных способов, будет произведена попытка аутентификации с использованием имени базы по-умолчанию. База по умолчанию определяется из конфигурационного файла `global3.config.xml` (в порядке приоритета). - Значение атрибута ```` - Значение атрибута ```` первой базы в списке конфигураций ```` .. _gs3_authentication_remote: Remote ------------------------ Аутентификация пользователя в системе выполняется на прокси-сервере, через который проходят все запросы от пользователей к серверу приложений Global. После успешной аутентификации, прокси сервер должен направить клиента на адрес сервера приложений Global, содержащий имя решения ``http(s)://server.domain/{SOLUTION}/``. В http-запрос должны добавлены заголовки: - ``X-Remote-User`` со значением ``имя_пользователя``. - ``X-Proxy-Token`` со значением ``аутентификационный_токен_прокси_сервера``. Сервер приложений, получив http-запрос с указанными выше заголовками, проверяет валидность токена прокси сервера вызовом метода :java:meth:`CoreAuthProvider.loginRemote()`. Если токен прокси сервера валиден, пользователь, с указанным в заголовке именем, считается аутентифицированным в системе, ему выдаётся пользовательский ast-токен (если он не был выдан ранее) и разрешается работа. Токен ```````````````````````` Токеном аутентификации является строка в формате: ``{тип}_{тело}``. Где: - ``{тип}`` - Тип токена. - ``{тело}`` - Тело токена: :term:`хэш` или :term:`JWT`. Типы токенов ~~~~~~~~~~~~~~~~~ Тип токена определяет место валидации и алгоритм обработки содержимого токена. .. note:: За сервером приложений зарезервированы имена типов, начинающиеся с символа ``a``. В текущей версии, сервер приложений формирует токены с типами: - ``ast`` - Application Server Token Токен формируется сервером приложений после входа в приложение Глобал с использованием имени пользователя и пароля. Токен возвращется клиенту в Cookie ``access_token``, привязанной к подмножеству адресов ``http[s]://server/{DATABASE}/``. Эта Cookie автоматически присоединяется ко всем запросам по адресам ``http[s]://server/{DATABASE}/``, выполняемым из браузера, аутентифицированного в системе Глобал. .. note:: Токены ``ast`` устаревают через 48 часов после создания и автоматически обновляются через 12 часов, при работе пользователя с системой. Валидация токенов других типов выполняется в :term:`GTK`, вызовом :java:meth:`CoreAuthProvider.loginBearer()`.