F.31. Базовый валидатор токенов OAuth#
F.31. Базовый валидатор токенов OAuth #
Этот модуль реализует простой валидатор токенов OAuth 2.0 для встроенной поддержки PostgreSQL потока авторизации устройства. Валидатор выполняет минимальную проверку, путем:
Извлечение полей
sub
(subject) иscope
из полезной нагрузки JWT.Сравнение областей действия токена с теми, которые требуются записью
pg_hba.conf
.Сопоставление аутентифицированной идентичности
sub
с ролью базы данных с использованиемpg_ident.conf
.Разрешение или запрет доступа на основе совпадения
sub
иscope
.
F.31.1. Логика проверки токена #
Он выполняет следующие шаги:
Разбор полезной нагрузки токена: Исходная строка токена разбирается для извлечения ее полезной нагрузки. Если токен имеет неверный формат или полезная нагрузка не может быть извлечена, проверка завершается неудачей.
Извлечение утверждений JWT: Полезная нагрузка должна содержать оба:
sub
: Субъект (используется для идентификации пользователя)scope
: Разделенный пробелами список областей, предоставленных токеном
Если любое из полей отсутствует, проверка завершается неудачей.
Сравните области: Области из записи
oauth_scope
вpg_hba.conf
сравниваются с областями, предоставленными токеном. Если некоторые отсутствуют в токене, проверка не проходит.В приведенном выше примере конфигурации проверка будет успешной, если токен содержит оба скоупа:
openid
иpostgres
.Установить результат авторизации: Флаг
res->authorized
устанавливается вtrue
, если области совпадают; в противном случае он устанавливается вfalse
.Назначить идентификацию аутентификации: Значение
sub
присваиваетсяres->authn_id
, которое PostgreSQL использует для идентификации аутентифицированного пользователя.Карта аутентификационной идентичности: Это значение
sub
затем сопоставляется вне этого модуля с записями вpg_ident.conf
для определения фактической роли базы данных, которую пользователь имеет право принять.Если сопоставление не удается, проверка не проходит.
В противном случае проверка проходит успешно, и клиент авторизован и успешно подключен к базе данных.
F.31.2. Пример конфигурации #
Пример записи в pg_hba.conf
:
# TYPE DATABASE USER ADDRESS METHOD [OPTIONS] local all all oauth issuer="https://<address>/.well-known/openid-configuration" scope="openid postgres" map="oauthmap"
Пример записи в pg_ident.conf
:
# MAPNAME SYSTEM-USERNAME PG-USERNAME oauthmap "7cf5b11f-adb2-4e67-83b7-5c75f7f1e6ee" mydbuser
Если токен содержит sub: "7cf5b11f-adb2-4e67-83b7-5c75f7f1e6ee"
,
и проверка проходит, PostgreSQL сопоставит "7cf5b11f-adb2-4e67-83b7-5c75f7f1e6ee"
с ролью mydbuser
с использованием записи oauthmap
.
F.31.3. Требования #
Модуль валидатора должен быть загружен через
oauth_validator_libraries
.pg_hba.conf
должен указыватьoauth
в качестве метода аутентификации и определятьoauth_scope
.pg_ident.conf
должен содержать отображения из значенийsub
в роли PostgreSQL.