pg_session_jwt
使用JWT进行会话认证
仓库
neondatabase/pg_session_jwt
https://github.com/neondatabase/pg_session_jwt
源码
pg_session_jwt-0.4.0.tar.gz
pg_session_jwt-0.4.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_session_jwt | 0.4.0 | SEC | Apache-2.0 | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7040 | pg_session_jwt | 否 | 是 | 否 | 是 | 是 | 否 | auth |
| 相关扩展 | pgjwt pgaudit pgsodium supabase_vault anon |
|---|
manual updated pgrx by Vonng
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.4.0 | 1817161514 | pg_session_jwt | - |
| RPM | PIGSTY | 0.4.0 | 1817161514 | pg_session_jwt_$v | - |
| DEB | PIGSTY | 0.4.0 | 1817161514 | postgresql-$v-pg-session-jwt | - |
构建
您可以使用 pig build 命令构建 pg_session_jwt 扩展的 RPM / DEB 包:
pig build pkg pg_session_jwt # 构建 RPM / DEB 包
安装
您可以直接安装 pg_session_jwt 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_session_jwt; # 当前活跃 PG 版本安装
pig ext install -y pg_session_jwt -v 18 # PG 18
pig ext install -y pg_session_jwt -v 17 # PG 17
pig ext install -y pg_session_jwt -v 16 # PG 16
pig ext install -y pg_session_jwt -v 15 # PG 15
pig ext install -y pg_session_jwt -v 14 # PG 14
dnf install -y pg_session_jwt_18 # PG 18
dnf install -y pg_session_jwt_17 # PG 17
dnf install -y pg_session_jwt_16 # PG 16
dnf install -y pg_session_jwt_15 # PG 15
dnf install -y pg_session_jwt_14 # PG 14
apt install -y postgresql-18-pg-session-jwt # PG 18
apt install -y postgresql-17-pg-session-jwt # PG 17
apt install -y postgresql-16-pg-session-jwt # PG 16
apt install -y postgresql-15-pg-session-jwt # PG 15
apt install -y postgresql-14-pg-session-jwt # PG 14
创建扩展:
CREATE EXTENSION pg_session_jwt;
用法
pg_session_jwt 通过 JWT 处理认证会话。配置 JWK 后验证 JWT 真实性;无 JWK 时回退到兼容 PostgREST 的 request.jwt.claims。
CREATE EXTENSION pg_session_jwt;
模式1:JWK 验证
在连接时通过 libpq 选项设置 JWK:
export PGOPTIONS="-c pg_session_jwt.jwk=$MY_JWK"
在会话中使用:
SELECT auth.init(); -- 使用 JWK 初始化
SELECT auth.jwt_session_init('eyJ...'); -- 设置并验证 JWT
SELECT auth.user_id(); -- 获取 'sub' 声明
SELECT auth.session(); -- 获取完整 JWT 载荷(JSONB)
模式2:PostgREST 兼容(无 JWK)
开箱即用适配 PostgREST,无需初始化:
SELECT auth.user_id(); -- 从 request.jwt.claims 返回 'sub'
SELECT auth.session(); -- 返回完整声明(JSONB)
函数
| 函数 | 返回类型 | 描述 |
|---|---|---|
auth.init() | void | 使用 JWK 初始化会话 |
auth.jwt_session_init(jwt text) | void | 设置并验证 JWT |
auth.session() | jsonb | 获取 JWT 载荷或回退声明 |
auth.jwt() | jsonb | auth.session() 的别名 |
auth.user_id() | text | 获取 sub 声明 |
auth.uid() | uuid | 获取 sub 作为 UUID(或 NULL) |
配置
| 参数 | 描述 |
|---|---|
pg_session_jwt.jwk | 用于 JWT 验证的 JWK(在启动或连接时设置) |
pg_session_jwt.audit_log | 启用审计日志(on/off) |
RLS 示例
CREATE POLICY user_isolation ON my_table
USING (user_id = auth.user_id());