CREATE TYPE "Audience" AS ENUM ( 'web', 'mobile', 'feed', 'admin_panel' ); CREATE TABLE tokens ( id serial not null primary key, customer_id uuid not null, role "Role" not null, -- standard fields -- iss (issuer): Issuer of the JWT issuer varchar not null default 'bazzar', -- sub (subject): Subject of the JWT (the user) subject int not null /* account_id */ , -- aud (audience): Recipient for which the JWT is intended audience "Audience" not null default 'web', -- exp (expiration time): Time after which the JWT expires expiration_time timestamp not null default now() + interval '2 weeks', -- nbt (not before time): Time before which the JWT must not be accepted for processing not_before_time timestamp not null default now() - interval '1 minute', -- iat (issued at time): Time at which the JWT was issued; can be used to determine age of the JWT, issued_at_time timestamp not null default now(), -- jti (JWT ID): Unique identifier; can be used to prevent the JWT from being replayed (allows a token to be used only once) jwt_id uuid not null default gen_random_uuid() );