9.3 9.4 9.5 9.6 10 11 12 13 14 15 16 17 Current(18)
PostgreSQL中文社区 问题报告 纠错本页面

20.15. OAuth 授权/认证 #

OAuth 2.0 是一个行业标准框架,定义在 RFC 6749中, 使第三方应用程序能够获得对受保护资源的有限访问。 当 PostgreSQL 被构建时,必须启用 OAuth 客户端支持, 有关更多信息,请参见 第 17 章

本文档在讨论 OAuth 生态系统时使用以下术语:

资源拥有者(或最终用户)

拥有受保护资源并可以授予访问权限的用户或系统。 当资源拥有者是个人时,本文档也使用术语 最终用户。 当您使用 psql 通过 OAuth 连接到数据库时, 您就是资源拥有者/最终用户。

客户端

使用访问令牌访问受保护资源的系统。 使用 libpq 的应用程序,例如 psql, 在连接到 PostgreSQL 集群时是 OAuth 客户端。

资源服务器

托管受保护资源的系统,客户端可以访问这些资源。 正在连接的 PostgreSQL 集群就是资源服务器。

提供者

开发和/或管理特定应用程序的 OAuth 授权服务器和客户端的组织、产品供应商或其他实体。 不同的提供者通常选择不同的实现细节来构建他们的 OAuth 系统; 一个提供者的客户端通常不能保证能够访问另一个提供者的服务器。

这个术语“提供者”的使用并不是标准的,但在口语中似乎被广泛使用。 (它不应与 OpenID 的类似术语“身份提供者”混淆。 尽管 PostgreSQL 中的 OAuth 实现旨在与 OpenID Connect/OIDC 互操作和兼容, 但它本身并不是 OIDC 客户端,也不要求使用 OIDC。)

授权服务器

接收来自客户端的请求并在经过身份验证的资源拥有者批准后向其发放访问令牌的系统。 PostgreSQL 不提供授权服务器;这由 OAuth 提供者负责。

发行者

授权服务器的标识符,以 https:// URL 的形式打印, 为 OAuth 客户端和应用程序提供可信的“命名空间”。 发行者标识符允许单个授权服务器与相互不信任实体的客户端进行通信, 只要它们保持独立的发行者。

注意

对于小型部署,“提供者”、“授权服务器”和“发行者”之间可能没有有意义的区别。 然而,对于更复杂的设置,可能存在一对多(或多对多)关系: 提供者可能会将多个发行者标识符租给不同的租户, 然后提供多个授权服务器,可能具有不同的支持功能集,以与其客户端进行交互。

PostgreSQL 支持承载令牌,定义在 RFC 6750中, 这是一种与 OAuth 2.0 一起使用的访问令牌类型,其中令牌是一个不透明字符串。 访问令牌的格式是实现特定的,由每个授权服务器选择。

支持以下 OAuth 配置选项:

issuer

一个 HTTPS URL,它是授权服务器的确切 发行者标识符, 如其发现文档所定义,或指向该发现文档的知名 URI。 此参数是必需的。

当 OAuth 客户端连接到服务器时,将使用发行者标识符构建发现文档的 URL。 默认情况下,此 URL 使用 OpenID Connect 发现的约定: 路径 /.well-known/openid-configuration 将附加到发行者标识符的末尾。 或者,如果 issuer 包含 /.well-known/ 路径段, 则该 URL 将原样提供给客户端。

警告

libpq 中的 OAuth 客户端要求服务器的发行者设置与 在发现文档中提供的发行者标识符完全匹配,而该标识符 又必须与客户端的 oauth_issuer 设置匹配。 不允许有大小写或格式的变化。

scope

服务器所需的 OAuth 范围的以空格分隔的列表,以便 同时授权客户端和验证用户。 适当的值由授权服务器 和所使用的 OAuth 验证模块确定(有关验证器的更多 信息,请参见 第 50 章)。 此参数是必需的。

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 验证器,后者必须 确定提供的令牌是否具有足够的最终用户权限,除了所有 验证器所需的 标准检查。 请谨慎使用。