2 min čtení

Bezpečnost a autentizace

PgArachne se plně spoléhá na systém oprávnění PostgreSQL. Nevynalézá znovu Access Control Lists (ACL). Všechny dotazy jsou prováděny pod specifickou databázovou rolí ověřeného uživatele pomocí SET LOCAL ROLE.

1. Interaktivní přihlášení (JWT)

Uživatelé se autentizují pomocí svého skutečného PostgreSQL uživatelského jména a hesla přes přihlašovací funkci. Pokud je úspěšná, obdrží obecný JWT. Při použití tohoto tokenu přepne PgArachne aktivní roli na tohoto uživatele po dobu trvání požadavku.

2. Služby (API tokeny)

Pro automatizované systémy nebo skripty můžete použít dlouhodobé API tokeny.

  • Tokeny jsou uloženy v tabulce pgarachne.api_tokens.
  • Každý token je mapován na konkrétního databázového uživatele/roli.
  • Token odešlete v hlavičce Authorization: Bearer <token>.

Vytváření API tokenů vyžaduje pgarachne_admin. Použijte pgarachne.add_api_token(...) s rolí, která je členem pgarachne_admin.

3. Externí identity provider (vlastní JWT)

Pokud uživatele autentizujete mimo PgArachne (například v externí autentizační službě), můžete JWT vydávat tam a posílat ho přímo do PgArachne.

  • Formát hlavičky: Authorization: Bearer <jwt>.
  • Podepisování: pouze HMAC (HS256/HS384/HS512) se stejným JWT_SECRET, jaký má PgArachne.
  • Povinné claimy: db_role (string, nesmí být prázdný) a db_name (string, musí odpovídat /api/:database).
  • Doporučený claim: exp (Unix timestamp) pro expiraci tokenu.

Minimalní příklad payloadu:

{
  "db_role": "demo_user",
  "db_name": "my_database",
  "exp": 1767225600
}

Důležité: asymetrické JWT algoritmy (např. RS256/ES256) aktuální implementace serveru nepřijímá.

Kritická konfigurace: Oprávnění proxy

Jelikož se PgArachne připojuje jako uživatel definovaný v DB_USER (např. pgarachne) a přepíná identitu na jiné uživatele, proxy uživatel musí být členem těchto cílových rolí.

Spusťte toto SQL pro každého uživatele/roli, která se potřebuje přihlásit:

-- Povolit 'pgarachne' přepnout se na 'demo_user'
GRANT demo_user TO pgarachne;

Viz také