F.33. oauth_validator — Базовый валидатор токенов OAuth 2.0 для Tantor SE#
F.33. oauth_validator — Базовый валидатор токенов OAuth 2.0 для Tantor SE #
Версия: 1.0
F.33.1. Обзор #
Этот модуль реализует простой валидатор токенов OAuth 2.0 для встроенной поддержки потока авторизации устройства. Валидатор выполняет минимальную проверку, путем:
Извлечение полей
sub(subject) иscopeиз полезной нагрузки JWT.Сравнение областей действия токена с теми, которые требуются записью
pg_hba.conf.Сопоставление идентификатора аутентификации
subс ролью базы данных с использованиемpg_ident.conf.Разрешение или запрет доступа на основе сопоставления
subи области.
F.33.2. Требования #
Tantor SE версии 18 или выше, сконфигурированный с флагом
--with-libcurl.
F.33.3. Установка #
Добавьте валидатор в
postgresql.conf, используя настройкуoauth_validator_libraries:oauth_validator_libraries='oauth_validator'Настройте файл
pg_ident.conf. Например:# MAPNAME SYSTEM-USERNAME PG-USERNAME oauthmap "7cf5b11f-adb2-4e67-83b7-5c75f7f1e6ee" "mydbuser"Настройте файл
pg_hba.conf. Например:local all all oauth issuer="https://<address>/.well-known/openid-configuration" scope="openid postgres" map="oauthmap"
F.33.4. Конфигурация #
postgresql.confдолжен содержать модуль валидатора в записиoauth_validator_libraries.pg_hba.confдолжен указыватьoauthв качестве метода аутентификации и определятьoauth_scope.pg_ident.confдолжен содержать сопоставления между значениями JWTsubи ролями Tantor SE.
F.33.4.1. Пример записи в pg_ident.conf #
# MAPNAME SYSTEM-USERNAME PG-USERNAME
oauthmap "7cf5b11f-adb2-4e67-83b7-5c75f7f1e6ee" "mydbuser"
Если токен содержит значение sub “7cf5b11f-adb2-4e67-83b7-5c75f7f1e6ee”, и проверка проходит успешно, Tantor SE сопоставит его с ролью mydbuser с помощью записи oauthmap.
F.33.4.2. Пример записи в pg_hba.conf #
local all all oauth issuer="https://<address>/.well-known/openid-configuration" scope="openid postgres" map="oauthmap"
F.33.5. Логика проверки токена #
Основная логика проверки реализована через функцию validate_token. Она выполняет следующие шаги:
Анализ полезной нагрузки токена: Строка необработанного токена анализируется для извлечения его полезной нагрузки. Если токен имеет неверный формат или полезная нагрузка не может быть извлечена, проверка завершается неудачей.
Извлечение утверждений JWT: Полезная нагрузка должна содержать оба:
sub: Субъект (используется для идентификации пользователя)scope: Разделенный пробелами список областей, предоставленных токеном
Если любое из полей отсутствует, проверка завершается неудачей.
Сравнение областей: Области из записи
oauth_scopeвpg_hba.confсравниваются с областями, предоставленными токеном. Если некоторые отсутствуют в токене, проверка завершается неудачей.В приведенном выше примере конфигурации проверка будет успешной, если токен содержит оба скоупа:
openidиpostgres.Установка результата авторизации: Флаг
res->authorizedустанавливается вtrue, если области совпадают; в противном случае он устанавливается вfalse.Назначение идентификационной информации для аутентификации: Значение
subприсваиваетсяres->authn_id, которое Tantor SE использует для идентификации аутентифицированного пользователя.Отображение идентификации аутентификации: Это значение
subзатем сопоставляется вне этого модуля с записями вpg_ident.confдля определения фактической роли базы данных, которую пользователь имеет право принять.Если сопоставление не удается, проверка не проходит.
В противном случае проверка проходит успешно, и клиент авторизован и успешно подключен к базе данных.
F.33.6. Расширяемость #
Эта базовая реализация может быть расширена дополнительными проверками или пользовательской логикой, такими как:
Проверка подписей токенов
Проверка истечения срока действия токена (
exp)Проверка аудитории (
aud) или издателя (iss)Динамическое получение ролей пользователя