Files

43 lines
2.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# JWT -> filter -> TenantContext -> schema-per-tenant (shared pool + search_path), real HTTP
provisioned schemas: acme, globex (ghostco deliberately not provisioned)
== the filter: who gets in
-- no Authorization header
GET /invoices -> HTTP 401 {"error":"missing bearer token"}
-- garbage token
GET /invoices -> HTTP 401 {"error":"invalid token"}
-- token signed with a different secret
GET /invoices -> HTTP 401 {"error":"invalid token"}
-- expired token (exp = 10 minutes ago)
GET /invoices -> HTTP 401 {"error":"invalid token"}
-- valid signature, no tenant_id claim
GET /invoices -> HTTP 403 {"error":"token carries no valid tenant"}
-- valid signature, tenant_id = "x; drop schema public cascade"
GET /invoices -> HTTP 403 {"error":"token carries no valid tenant"}
-- valid signature, tenant_id = "public" (reserved name)
GET /invoices -> HTTP 403 {"error":"token carries no valid tenant"}
== two tenants, same URL, different data
-- acme creates INV-1
POST /invoices -> HTTP 201 {"id":1,"number":"INV-1","amount":100.00,"tenant":"acme"}
-- acme creates INV-2
POST /invoices -> HTTP 201 {"id":2,"number":"INV-2","amount":250.00,"tenant":"acme"}
-- globex creates INV-9
POST /invoices -> HTTP 201 {"id":1,"number":"INV-9","amount":999.00,"tenant":"globex"}
-- acme lists
GET /invoices -> HTTP 200 [{"id":1,"number":"INV-1","amount":100.00,"tenant":"acme"},{"id":2,"number":"INV-2","amount":250.00,"tenant":"acme"}]
-- globex lists
GET /invoices -> HTTP 200 [{"id":1,"number":"INV-9","amount":999.00,"tenant":"globex"}]
== cross-tenant read by id
-- globex asks for acme's INV-2 by id (2)
GET /invoices/2 -> HTTP 404
-- acme asks for the same id
GET /invoices/2 -> HTTP 200 {"id":2,"number":"INV-2","amount":250.00,"tenant":"acme"}
== a well-formed tenant nobody has onboarded
-- token for tenant "ghostco": GET /invoices
GET /invoices -> HTTP 500 <!doctype html><html lang="en"><head><title>HTTP Status 500 – Internal Server Error</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1...
-- token for tenant "ghostco": POST /invoices
POST /invoices -> HTTP 500 <!doctype html><html lang="en"><head><title>HTTP Status 500 – Internal Server Error</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1...