Перейти к основному содержимому

Авторизация/аутентификация OAuth

OAuth 2.0 — это отраслевой стандарт, определенный в RFC 6749, позволяющий сторонним приложениям получать ограниченный доступ к защищенному ресурсу. Поддержка клиента OAuth должна быть включена при сборке PostgreSQL.

В этой документации используется следующая терминология при обсуждении экосистемы OAuth:

Владелец ресурса (или конечный пользователь)

Пользователь или система, владеющая защищенными ресурсами и способная предоставлять к ним доступ. В этой документации также используется термин «конечный пользователь», когда владельцем ресурса является физическое лицо. При использовании psql для подключения к базе данных с помощью OAuth пользователь psql является владельцем ресурса/конечным пользователем.

Клиент

Система, которая получает доступ к защищенным ресурсам с помощью токенов доступа. Приложения, использующие libpq, такие как psql, являются клиентами OAuth при подключении к кластеру PostgreSQL.

Сервер ресурсов

Система, размещающая защищенные ресурсы, к которым обращается клиент. Кластер PostgreSQL, к которому осуществляется подключение, является сервером ресурсов.

Поставщик

Организация, поставщик продукта или другое юридическое лицо, разрабатывающее и/или администрирующее серверы и клиенты авторизации OAuth для данного приложения. Разные поставщики обычно выбирают разные детали реализации своих систем OAuth; клиенту одного поставщика, как правило, не гарантируется доступ к серверам другого.

Такое использование термина «поставщик» не является стандартным, но, похоже, широко используется в разговорной речи. (Его не следует путать с аналогичным термином OpenID «поставщик идентификации». Хотя реализация OAuth в PostgreSQL предназначена для обеспечения совместимости с OpenID Connect/OIDC, сама по себе она не является клиентом OIDC и не требует его использования.)

Сервер авторизации

Система, которая получает запросы от клиента и выдает ему токены доступа после того, как аутентифицированный владелец ресурса дал свое согласие. PostgreSQL не предоставляет сервер авторизации; это ответственность поставщика OAuth.

Издатель

Идентификатор сервера авторизации, отображаемый в виде URL-адреса https://, который предоставляет доверенное «пространство имен» для клиентов и приложений OAuth. Идентификатор издателя позволяет одному серверу авторизации взаимодействовать с клиентами взаимно недоверяющих друг другу организаций, при условии, что у них есть отдельные издатели.

примечание

В небольших развертываниях может не быть существенного различия между «поставщиком», «сервером авторизации» и «издателем». Однако в более сложных конфигурациях может существовать отношение «один ко многим» (или «многие ко многим»): поставщик может сдавать в аренду несколько идентификаторов издателей разным арендаторам, а затем предоставлять несколько серверов авторизации, возможно, с различными поддерживаемыми наборами функций, для взаимодействия со своими клиентами.

PostgreSQL поддерживает токены bearer, определенные в RFC 6750, которые представляют собой тип токена доступа, используемый с OAuth 2.0, где токен представляет собой непрозрачную строку. Формат токена доступа зависит от реализации и выбирается каждым сервером авторизации.

Для OAuth поддерживаются следующие параметры конфигурации:

issuer

URL-адрес HTTPS, который представляет собой либо точный идентификатор эмитента сервера авторизации, определенный в его документе обнаружения, либо известный URI, указывающий непосредственно на этот документ обнаружения. Этот параметр является обязательным.

Когда клиент OAuth подключается к серверу, URL-адрес для документа обнаружения будет сформирован с использованием идентификатора эмитента. По умолчанию этот URL-адрес использует соглашения OpenID Connect Discovery: путь /.well-known/openid-configuration будет добавлен в конец идентификатора эмитента. В качестве альтернативы, если эмитент содержит сегмент пути /.well-known/, этот URL-адрес будет предоставлен клиенту как есть.

warning

Клиент OAuth в libpq требует, чтобы настройка эмитента сервера точно соответствовала идентификатору эмитента, указанному в документе обнаружения, который, в свою очередь, должен соответствовать настройке oauth_issuer клиента. Изменения регистра или форматирования не допускаются.

scope

Список областей действия OAuth, разделенных пробелами, необходимых серверу для авторизации клиента и аутентификации пользователя. Соответствующие значения определяются сервером авторизации и используемым модулем проверки OAuth. Этот параметр является обязательным.

validator

Библиотека для проверки токенов bearer. Если указана, имя должно точно соответствовать одной из библиотек, перечисленных в oauth_validator_libraries. Этот параметр является необязательным, если oauth_validator_libraries не содержит более одной библиотеки, в этом случае он является обязательным.

map

Позволяет сопоставлять имена пользователей поставщика идентификации OAuth и базы данных. Если map не указана, имя пользователя, связанное с токеном (определяемое валидатором OAuth), должно точно соответствовать запрашиваемому имени роли. Этот параметр является необязательным.

delegate_ident_mapping

Расширенная опция, не предназначенная для широкого использования.

При значении 1 стандартное сопоставление пользователей с pg_ident.conf пропускается, и валидатор OAuth берет на себя полную ответственность за сопоставление идентификаторов конечных пользователей с ролями базы данных. Если валидатор авторизует токен, сервер доверяет тому, что пользователю разрешено подключаться в рамках запрошенной роли, и соединение разрешается независимо от статуса аутентификации пользователя.

Этот параметр несовместим с параметром map.

warning

delegate_ident_mapping обеспечивает дополнительную гибкость в проектировании системы аутентификации, но также требует тщательной реализации валидатора OAuth, который должен определить, обладает ли предоставленный токен достаточными привилегиями конечного пользователя в дополнение к стандартным проверкам, требуемым от всех валидаторов. Используйте с осторожностью.