oidc_validator

使用 Rust 与 pgrx 编写的 PostgreSQL 18 OIDC Bearer 令牌验证模块

概览

扩展包名版本分类许可证语言
pg_oidc_validator_rust0.1.0SECLicenseRef-Upstream-No-LicenseRust
ID扩展名BinLibLoadCreateTrustReloc模式
7180oidc_validator-
相关扩展pg_oidc_validator pg_session_jwt pgjwt login_hook auth_delay

Configure oauth_validator_libraries=‘oidc_validator’. Built from upstream commit b65bbbe288f84fab91d58b8304e8a526d1326af5; upstream publishes no license grant.

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.1.01817161514pg_oidc_validator_rust-
RPMPIGSTY0.1.01817161514pg_oidc_validator_rust_$v-
DEBPIGSTY0.1.01817161514postgresql-$v-pg-oidc-validator-rust-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
PIGSTY 0.1.0
N/AN/AN/AN/A
el8.aarch64
PIGSTY 0.1.0
N/AN/AN/AN/A
el9.x86_64
PIGSTY 0.1.0
N/AN/AN/AN/A
el9.aarch64
PIGSTY 0.1.0
N/AN/AN/AN/A
el10.x86_64
PIGSTY 0.1.0
N/AN/AN/AN/A
el10.aarch64
PIGSTY 0.1.0
N/AN/AN/AN/A
d12.x86_64
PIGSTY 0.1.0
N/AN/AN/AN/A
d12.aarch64
PIGSTY 0.1.0
N/AN/AN/AN/A
d13.x86_64
PIGSTY 0.1.0
N/AN/AN/AN/A
d13.aarch64
PIGSTY 0.1.0
N/AN/AN/AN/A
u22.x86_64
PIGSTY 0.1.0
N/AN/AN/AN/A
u22.aarch64
PIGSTY 0.1.0
N/AN/AN/AN/A
u24.x86_64
PIGSTY 0.1.0
N/AN/AN/AN/A
u24.aarch64
PIGSTY 0.1.0
N/AN/AN/AN/A
u26.x86_64
PIGSTY 0.1.0
N/AN/AN/AN/A
u26.aarch64
PIGSTY 0.1.0
N/AN/AN/AN/A

构建

您可以使用 pig build 命令构建 pg_oidc_validator_rust 扩展的 RPM / DEB 包:

pig build pkg pg_oidc_validator_rust         # 构建 RPM / DEB 包

安装

您可以直接安装 pg_oidc_validator_rust 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg_oidc_validator_rust;          # 当前活跃 PG 版本安装
pig ext install -y pg_oidc_validator_rust -v 18  # PG 18
dnf install -y pg_oidc_validator_rust_18       # PG 18
apt install -y postgresql-18-pg-oidc-validator-rust   # PG 18

预加载配置

shared_preload_libraries = 'oidc_validator';

用法

来源:

oidc_validator 是一个用 Rust 编写的 PostgreSQL 18 OAuth 验证模块。它会验证 JWT 访问令牌并将其主题作为已认证的身份返回。这是一个无头的认证库,而不是 SQL 扩展,因此不会创建任何 SQL 对象,也不会使用 CREATE EXTENSION

核心工作流程

oidc_validator.so 安装到 PostgreSQL 的库目录中,然后配置 PostgreSQL 18 验证模块:

oauth_validator_libraries = 'oidc_validator'

pg_hba.conf 中添加一个 OAuth 规则:

host all all 0.0.0.0/0 oauth issuer="https://issuer.example" scope="openid profile"

向 PostgreSQL 服务器进程提供验证器配置:

POSTGRES_OIDC_ISSUER=https://issuer.example
POSTGRES_OIDC_CLIENT_ID=postgres
POSTGRES_OIDC_AUDIENCE=postgres

更改 oauth_validator_libraries 或服务器进程环境后重启 PostgreSQL。然后,OAuth 客户端可以通过匹配的 pg_hba.conf 规则进行认证。

配置索引

  • POSTGRES_OIDC_ISSUER: 不带已知发现后缀的发行人 URL。
  • POSTGRES_OIDC_CLIENT_ID: OIDC 应用客户端 ID。
  • POSTGRES_OIDC_AUDIENCE: 必须的令牌受众,通常为客户端 ID。
  • oauth_validator_libraries: PostgreSQL 18 设置项,用于加载受信任验证模块。

要求和注意事项

  • 上游版本 0.1.0 针对 PostgreSQL 18,并要求在编译 PostgreSQL 时启用 OpenSSL 和 libcurl。
  • 只接受 JWT 样式的凭据令牌。不接受密文访问令牌。
  • 验证会执行 OIDC 发现和 JWKS 获取操作,因此 PostgreSQL 服务器必须能够通过 TLS 访问发行人。
  • 当前回调忽略请求的 PostgreSQL 角色,并基于成功的令牌验证进行授权。不要使用此实现设置 delegate_ident_mapping=1;保持 PostgreSQL 的标准精确名称映射或 pg_ident.conf 映射,以便返回的令牌主题可以与请求的角色进行检查。