20.15. Авторизация/Аутентификация OAuth#
20.15. Авторизация/Аутентификация OAuth #
OAuth 2.0 является отраслевым стандартом, определенным в RFC 6749, для предоставления сторонним приложениям ограниченного доступа к защищенному ресурсу
Эта документация использует следующую терминологию при обсуждении экосистемы OAuth:
- Resource Owner (or End User)
Пользователь или система, владеющие защищенными ресурсами и имеющие возможность предоставлять доступ к ним. В этой документации также используется термин конечный пользователь, когда владельцем ресурса является человек. Когда вы используете psql для подключения к базе данных с использованием OAuth, вы являетесь владельцем ресурса/конечным пользователем.
- Client
Система, которая получает доступ к защищенным ресурсам, используя токены доступа. Приложения, использующие libpq, такие как psql, являются клиентами OAuth при подключении к кластеру Tantor SE.
- Resource Server
Система, размещающая защищенные ресурсы, к которым обращается клиент. Tantor SE кластер, к которому осуществляется подключение, является сервером ресурсов.
- Provider
Организация, поставщик продукта или другое лицо, которое разрабатывает и/или администрирует серверы авторизации OAuth и клиентов для данного приложения. Разные провайдеры обычно выбирают разные детали реализации для своих систем OAuth; клиент одного провайдера, как правило, не имеет гарантированного доступа к серверам другого.
Это использование термина "провайдер" не является стандартным, но, похоже, широко используется в разговорной речи. (Его не следует путать с похожим термином OpenID "Поставщик идентификации". Хотя реализация OAuth в Tantor SE предназначена для взаимодействия и совместимости с OpenID Connect/OIDC, она сама по себе не является клиентом OIDC и не требует его использования.)
- Authorization Server
Система, которая получает запросы от клиента и выдает токены доступа после того, как аутентифицированный владелец ресурса дал одобрение. Tantor SE не предоставляет сервер авторизации; это ответственность провайдера OAuth.
- Issuer
Идентификатор для сервера авторизации, напечатанный как
https://
URL, который предоставляет доверенное "пространство имен" для OAuth клиентов и приложений. Идентификатор издателя позволяет одному серверу авторизации общаться с клиентами взаимно недоверяющих сущностей, при условии, что они поддерживают отдельных издателей.
Примечание
Для небольших развертываний может не быть значимого различия между "поставщиком", "сервером авторизации" и "издателем". Однако для более сложных настроек может существовать отношение один ко многим (или многие ко многим): поставщик может сдавать в аренду несколько идентификаторов издателя отдельным арендаторам, затем предоставлять несколько серверов авторизации, возможно, с различными наборами поддерживаемых функций, для взаимодействия с их клиентами.
Tantor SE поддерживает маркерные токены, определенные в RFC 6750, которые являются типом токена доступа, используемого с OAuth 2.0, где токен является непрозрачной строкой. Формат токена доступа зависит от реализации и выбирается каждым сервером авторизации.
Поддерживаются следующие параметры конфигурации для OAuth:
issuer
HTTPS URL, который является либо точным идентификатором издателя сервера авторизации, как определено в его документе обнаружения, либо общеизвестным URI, который указывает непосредственно на этот документ обнаружения. Этот параметр обязателен.
Когда клиент OAuth подключается к серверу, URL для документа обнаружения будет сформирован с использованием идентификатора издателя. По умолчанию, этот URL использует соглашения OpenID Connect Discovery: путь
/.well-known/openid-configuration
будет добавлен в конец идентификатора издателя. В качестве альтернативы, еслиissuer
содержит сегмент пути/.well-known/
, этот URL будет предоставлен клиенту как есть.Предупреждение
Клиент OAuth в libpq требует, чтобы настройка издателя сервера точно соответствовала идентификатору издателя, который предоставлен в документе обнаружения, который, в свою очередь, должен соответствовать настройке клиента oauth_issuer. Не допускаются вариации в регистре или форматировании.
scope
Список областей действия OAuth, разделенных пробелами, необходимых для того, чтобы сервер мог как авторизовать клиента, так и аутентифицировать пользователя. Соответствующие значения определяются сервером авторизации и используемым модулем проверки OAuth (см. Глава 49 для получения дополнительной информации о валидаторах). Этот параметр обязателен.
validator
Библиотека для использования при проверке токенов-носителей. Если указано, имя должно точно совпадать с одним из библиотек, перечисленных в oauth_validator_libraries. Этот параметр является необязательным, если только
oauth_validator_libraries
не содержит более одной библиотеки, в этом случае он обязателен.map
Позволяет сопоставлять между поставщиком удостоверений OAuth и именами пользователей базы данных. См. Раздел 20.2 для подробностей. Если карта не указана, имя пользователя, связанное с токеном (как определено валидатором OAuth), должно точно совпадать с запрашиваемым именем роли. Этот параметр является необязательным.
-
delegate_ident_mapping
Расширенная опция, не предназначенная для обычного использования.
Когда установлено значение
1
, стандартное сопоставление пользователей сpg_ident.conf
пропускается, и валидатор OAuth полностью отвечает за сопоставление идентичностей конечных пользователей с ролями базы данных. Если валидатор авторизует токен, сервер доверяет, что пользователю разрешено подключаться под запрашиваемой ролью, и подключение разрешается независимо от статуса аутентификации пользователя.Этот параметр несовместим с
map
.Предупреждение
delegate_ident_mapping
обеспечивает дополнительную гибкость в проектировании системы аутентификации, но также требует тщательной реализации валидатора OAuth, который должен определять, обладает ли предоставленный токен достаточными привилегиями конечного пользователя в дополнение к стандартным проверкам, требуемым от всех валидаторов. Используйте с осторожностью.