跳转到主要内容

pg_session_jwt

Manage authentication sessions using JWTs

pg_session_jwt : Manage authentication sessions using JWTs

Overview

ID Extension Package Version Category License Language
7060 pg_session_jwt pg_session_jwt 0.5.0 SEC Apache-2.0 Rust
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--s-dt- No Yes No Yes no yes

Packages

Type Repo Version PG Major Compatibility Package Pattern Dependencies
EXT PIGSTY 0.5.0 18 17 16 15 14 pg_session_jwt -
RPM PIGSTY 0.5.0 18 17 16 15 14 pg_session_jwt_$v -
DEB PIGSTY 0.5.0 18 17 16 15 14 postgresql-$v-pg-session-jwt -
Linux / PG PG18 PG17 PG16 PG15 PG14
el8.x86_64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
el8.aarch64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
el9.x86_64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
el9.aarch64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
el10.x86_64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
el10.aarch64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
d12.x86_64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
d12.aarch64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
d13.x86_64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
d13.aarch64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
u22.x86_64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
u22.aarch64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
u24.x86_64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
u24.aarch64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
u26.x86_64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
u26.aarch64 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0 PIGSTY 0.5.0
Package Version OS ORG SIZE File URL
pg_session_jwt_18 0.5.0 el8.x86_64 pigsty 1007.5 KiB pg_session_jwt_18-0.5.0-2PIGSTY.el8.x86_64.rpm
pg_session_jwt_18 0.5.0 el8.aarch64 pigsty 929.1 KiB pg_session_jwt_18-0.5.0-2PIGSTY.el8.aarch64.rpm
pg_session_jwt_18 0.5.0 el9.x86_64 pigsty 1023.2 KiB pg_session_jwt_18-0.5.0-2PIGSTY.el9.x86_64.rpm
pg_session_jwt_18 0.5.0 el9.aarch64 pigsty 985.6 KiB pg_session_jwt_18-0.5.0-2PIGSTY.el9.aarch64.rpm
pg_session_jwt_18 0.5.0 el10.x86_64 pigsty 1023.4 KiB pg_session_jwt_18-0.5.0-2PIGSTY.el10.x86_64.rpm
pg_session_jwt_18 0.5.0 el10.aarch64 pigsty 964.8 KiB pg_session_jwt_18-0.5.0-2PIGSTY.el10.aarch64.rpm
postgresql-18-pg-session-jwt 0.5.0 d12.x86_64 pigsty 803.9 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~bookworm_amd64.deb
postgresql-18-pg-session-jwt 0.5.0 d12.aarch64 pigsty 688.1 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~bookworm_arm64.deb
postgresql-18-pg-session-jwt 0.5.0 d13.x86_64 pigsty 803.6 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~trixie_amd64.deb
postgresql-18-pg-session-jwt 0.5.0 d13.aarch64 pigsty 688.9 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~trixie_arm64.deb
postgresql-18-pg-session-jwt 0.5.0 u22.x86_64 pigsty 900.1 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~jammy_amd64.deb
postgresql-18-pg-session-jwt 0.5.0 u22.aarch64 pigsty 817.0 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~jammy_arm64.deb
postgresql-18-pg-session-jwt 0.5.0 u24.x86_64 pigsty 892.2 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~noble_amd64.deb
postgresql-18-pg-session-jwt 0.5.0 u24.aarch64 pigsty 807.3 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~noble_arm64.deb
postgresql-18-pg-session-jwt 0.5.0 u26.x86_64 pigsty 885.7 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~resolute_amd64.deb
postgresql-18-pg-session-jwt 0.5.0 u26.aarch64 pigsty 806.2 KiB postgresql-18-pg-session-jwt_0.5.0-2PIGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_session_jwt_17 0.5.0 el8.x86_64 pigsty 1003.4 KiB pg_session_jwt_17-0.5.0-2PIGSTY.el8.x86_64.rpm
pg_session_jwt_17 0.5.0 el8.aarch64 pigsty 926.0 KiB pg_session_jwt_17-0.5.0-2PIGSTY.el8.aarch64.rpm
pg_session_jwt_17 0.5.0 el9.x86_64 pigsty 1022.6 KiB pg_session_jwt_17-0.5.0-2PIGSTY.el9.x86_64.rpm
pg_session_jwt_17 0.5.0 el9.aarch64 pigsty 982.8 KiB pg_session_jwt_17-0.5.0-2PIGSTY.el9.aarch64.rpm
pg_session_jwt_17 0.5.0 el10.x86_64 pigsty 1016.9 KiB pg_session_jwt_17-0.5.0-2PIGSTY.el10.x86_64.rpm
pg_session_jwt_17 0.5.0 el10.aarch64 pigsty 964.7 KiB pg_session_jwt_17-0.5.0-2PIGSTY.el10.aarch64.rpm
postgresql-17-pg-session-jwt 0.5.0 d12.x86_64 pigsty 800.3 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~bookworm_amd64.deb
postgresql-17-pg-session-jwt 0.5.0 d12.aarch64 pigsty 687.4 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~bookworm_arm64.deb
postgresql-17-pg-session-jwt 0.5.0 d13.x86_64 pigsty 800.1 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~trixie_amd64.deb
postgresql-17-pg-session-jwt 0.5.0 d13.aarch64 pigsty 687.0 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~trixie_arm64.deb
postgresql-17-pg-session-jwt 0.5.0 u22.x86_64 pigsty 895.0 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~jammy_amd64.deb
postgresql-17-pg-session-jwt 0.5.0 u22.aarch64 pigsty 813.1 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~jammy_arm64.deb
postgresql-17-pg-session-jwt 0.5.0 u24.x86_64 pigsty 887.2 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~noble_amd64.deb
postgresql-17-pg-session-jwt 0.5.0 u24.aarch64 pigsty 804.9 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~noble_arm64.deb
postgresql-17-pg-session-jwt 0.5.0 u26.x86_64 pigsty 882.8 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~resolute_amd64.deb
postgresql-17-pg-session-jwt 0.5.0 u26.aarch64 pigsty 803.8 KiB postgresql-17-pg-session-jwt_0.5.0-2PIGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_session_jwt_16 0.5.0 el8.x86_64 pigsty 1005.5 KiB pg_session_jwt_16-0.5.0-2PIGSTY.el8.x86_64.rpm
pg_session_jwt_16 0.5.0 el8.aarch64 pigsty 925.3 KiB pg_session_jwt_16-0.5.0-2PIGSTY.el8.aarch64.rpm
pg_session_jwt_16 0.5.0 el9.x86_64 pigsty 1020.1 KiB pg_session_jwt_16-0.5.0-2PIGSTY.el9.x86_64.rpm
pg_session_jwt_16 0.5.0 el9.aarch64 pigsty 981.8 KiB pg_session_jwt_16-0.5.0-2PIGSTY.el9.aarch64.rpm
pg_session_jwt_16 0.5.0 el10.x86_64 pigsty 1020.2 KiB pg_session_jwt_16-0.5.0-2PIGSTY.el10.x86_64.rpm
pg_session_jwt_16 0.5.0 el10.aarch64 pigsty 964.6 KiB pg_session_jwt_16-0.5.0-2PIGSTY.el10.aarch64.rpm
postgresql-16-pg-session-jwt 0.5.0 d12.x86_64 pigsty 800.9 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~bookworm_amd64.deb
postgresql-16-pg-session-jwt 0.5.0 d12.aarch64 pigsty 686.2 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~bookworm_arm64.deb
postgresql-16-pg-session-jwt 0.5.0 d13.x86_64 pigsty 801.9 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~trixie_amd64.deb
postgresql-16-pg-session-jwt 0.5.0 d13.aarch64 pigsty 687.0 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~trixie_arm64.deb
postgresql-16-pg-session-jwt 0.5.0 u22.x86_64 pigsty 896.7 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~jammy_amd64.deb
postgresql-16-pg-session-jwt 0.5.0 u22.aarch64 pigsty 814.9 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~jammy_arm64.deb
postgresql-16-pg-session-jwt 0.5.0 u24.x86_64 pigsty 888.2 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~noble_amd64.deb
postgresql-16-pg-session-jwt 0.5.0 u24.aarch64 pigsty 803.9 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~noble_arm64.deb
postgresql-16-pg-session-jwt 0.5.0 u26.x86_64 pigsty 883.0 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~resolute_amd64.deb
postgresql-16-pg-session-jwt 0.5.0 u26.aarch64 pigsty 802.8 KiB postgresql-16-pg-session-jwt_0.5.0-2PIGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_session_jwt_15 0.5.0 el8.x86_64 pigsty 996.3 KiB pg_session_jwt_15-0.5.0-2PIGSTY.el8.x86_64.rpm
pg_session_jwt_15 0.5.0 el8.aarch64 pigsty 917.0 KiB pg_session_jwt_15-0.5.0-2PIGSTY.el8.aarch64.rpm
pg_session_jwt_15 0.5.0 el9.x86_64 pigsty 1006.8 KiB pg_session_jwt_15-0.5.0-2PIGSTY.el9.x86_64.rpm
pg_session_jwt_15 0.5.0 el9.aarch64 pigsty 971.3 KiB pg_session_jwt_15-0.5.0-2PIGSTY.el9.aarch64.rpm
pg_session_jwt_15 0.5.0 el10.x86_64 pigsty 1006.8 KiB pg_session_jwt_15-0.5.0-2PIGSTY.el10.x86_64.rpm
pg_session_jwt_15 0.5.0 el10.aarch64 pigsty 959.9 KiB pg_session_jwt_15-0.5.0-2PIGSTY.el10.aarch64.rpm
postgresql-15-pg-session-jwt 0.5.0 d12.x86_64 pigsty 796.0 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~bookworm_amd64.deb
postgresql-15-pg-session-jwt 0.5.0 d12.aarch64 pigsty 681.4 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~bookworm_arm64.deb
postgresql-15-pg-session-jwt 0.5.0 d13.x86_64 pigsty 794.8 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~trixie_amd64.deb
postgresql-15-pg-session-jwt 0.5.0 d13.aarch64 pigsty 682.6 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~trixie_arm64.deb
postgresql-15-pg-session-jwt 0.5.0 u22.x86_64 pigsty 887.7 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~jammy_amd64.deb
postgresql-15-pg-session-jwt 0.5.0 u22.aarch64 pigsty 808.3 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~jammy_arm64.deb
postgresql-15-pg-session-jwt 0.5.0 u24.x86_64 pigsty 880.4 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~noble_amd64.deb
postgresql-15-pg-session-jwt 0.5.0 u24.aarch64 pigsty 798.8 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~noble_arm64.deb
postgresql-15-pg-session-jwt 0.5.0 u26.x86_64 pigsty 877.2 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~resolute_amd64.deb
postgresql-15-pg-session-jwt 0.5.0 u26.aarch64 pigsty 796.7 KiB postgresql-15-pg-session-jwt_0.5.0-2PIGSTY~resolute_arm64.deb
Package Version OS ORG SIZE File URL
pg_session_jwt_14 0.5.0 el8.x86_64 pigsty 992.6 KiB pg_session_jwt_14-0.5.0-2PIGSTY.el8.x86_64.rpm
pg_session_jwt_14 0.5.0 el8.aarch64 pigsty 914.4 KiB pg_session_jwt_14-0.5.0-2PIGSTY.el8.aarch64.rpm
pg_session_jwt_14 0.5.0 el9.x86_64 pigsty 1001.9 KiB pg_session_jwt_14-0.5.0-2PIGSTY.el9.x86_64.rpm
pg_session_jwt_14 0.5.0 el9.aarch64 pigsty 969.8 KiB pg_session_jwt_14-0.5.0-2PIGSTY.el9.aarch64.rpm
pg_session_jwt_14 0.5.0 el10.x86_64 pigsty 1001.7 KiB pg_session_jwt_14-0.5.0-2PIGSTY.el10.x86_64.rpm
pg_session_jwt_14 0.5.0 el10.aarch64 pigsty 958.6 KiB pg_session_jwt_14-0.5.0-2PIGSTY.el10.aarch64.rpm
postgresql-14-pg-session-jwt 0.5.0 d12.x86_64 pigsty 791.0 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~bookworm_amd64.deb
postgresql-14-pg-session-jwt 0.5.0 d12.aarch64 pigsty 679.4 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~bookworm_arm64.deb
postgresql-14-pg-session-jwt 0.5.0 d13.x86_64 pigsty 792.7 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~trixie_amd64.deb
postgresql-14-pg-session-jwt 0.5.0 d13.aarch64 pigsty 679.5 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~trixie_arm64.deb
postgresql-14-pg-session-jwt 0.5.0 u22.x86_64 pigsty 882.1 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~jammy_amd64.deb
postgresql-14-pg-session-jwt 0.5.0 u22.aarch64 pigsty 806.9 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~jammy_arm64.deb
postgresql-14-pg-session-jwt 0.5.0 u24.x86_64 pigsty 873.7 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~noble_amd64.deb
postgresql-14-pg-session-jwt 0.5.0 u24.aarch64 pigsty 797.3 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~noble_arm64.deb
postgresql-14-pg-session-jwt 0.5.0 u26.x86_64 pigsty 869.8 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~resolute_amd64.deb
postgresql-14-pg-session-jwt 0.5.0 u26.aarch64 pigsty 794.1 KiB postgresql-14-pg-session-jwt_0.5.0-2PIGSTY~resolute_arm64.deb

Source

github.com/neondatabase/pg_session_jwt

pig build pkg pg_session_jwt;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install pg_session_jwt;		# install via package name, for the active PG version

pig install pg_session_jwt -v 18;   # install for PG 18
pig install pg_session_jwt -v 17;   # install for PG 17
pig install pg_session_jwt -v 16;   # install for PG 16
pig install pg_session_jwt -v 15;   # install for PG 15
pig install pg_session_jwt -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION pg_session_jwt;

Usage

Sources: README, v0.5.0 tag, control file

pg_session_jwt handles authenticated sessions through JWTs. When configured with a JWK, it verifies JWT authenticity. Without a JWK, it falls back to PostgREST-compatible request.jwt.claims.

CREATE EXTENSION pg_session_jwt;

Mode 1: JWK Validation

Set the JWK at connection time via libpq options:

export PGOPTIONS="-c pg_session_jwt.jwk=$MY_JWK"

Then within the session:

SELECT auth.init();                        -- Initialize with JWK
SELECT auth.jwt_session_init('eyJ...');    -- Set and validate the JWT
SELECT auth.user_id();                     -- Get the 'sub' claim
SELECT auth.session();                     -- Get full JWT payload as JSONB

Mode 2: PostgREST-Compatible (No JWK)

Works out of the box with PostgREST. No initialization needed:

SELECT auth.user_id();   -- Returns 'sub' from request.jwt.claims
SELECT auth.session();   -- Returns full claims as JSONB

Functions

Function Returns Description
auth.init() void Initialize session using JWK
auth.jwt_session_init(jwt text) void Set and validate a JWT
auth.session() jsonb Get JWT payload or fallback claims
auth.jwt() jsonb Alias for auth.session()
auth.user_id() text Get the sub claim
auth.uid() uuid Get sub as UUID (or NULL)
auth.organization() jsonb Neon Auth organization claim helper
auth.organization_id() uuid Neon Auth organization id helper

Configuration

Parameter Description
pg_session_jwt.jwk JWK for JWT validation (set at startup or connection)
pg_session_jwt.audit_log Enable audit logging (on/off)

RLS Example

CREATE POLICY user_isolation ON my_table
    USING (user_id = auth.user_id());

For Neon Auth organization-scoped policies, use the o claim helpers:

CREATE POLICY team_select ON team
  FOR SELECT
  USING (organization_id = auth.organization_id());

Version Notes

The v0.5.0 README adds Neon Auth organization helpers and explicitly separates portable helpers such as auth.jwt(), auth.user_id(), and auth.uid() from Neon-specific auth.organization() and auth.organization_id(). Other auth providers should use auth.jwt() and extract provider-specific claims directly.