OTT PM tool docs Help

Autentizace / Autorizace

Autentizace

Autentizaci uživatelů zajišťuje Auth modul. Ten bude ukládat všechny informace o uživatelích a zajišťovat přihlášení. Přihlášení bude probíhat přes /login endpoint, který vrátí podepsaný JWT (JSON Web Token - RFC 7519) s přibližnou strukturou (může se měnit):

Base64:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIzNCwibmFtZSI6IkthcmVsIiwiY2FwIjpbInRvZG8tY3JlYXRlIiwidG9kby1zaG93Il19.86ouHiIys6pKuOHPCmuaznKMv3yrOWvlz88aAxvbniU

Header:

{ "alg": "HS256", "typ": "JWT" }

Klíč

Typ

Popis

alg

string

Pracovat budeme jen s hodnotou HS256. Musí se validovat!

typ

string

JWT

Payload:

{ "sub": 1234, "name": "Karel", "email": "karel@email.cz", "ins": 1, "iat": "2025-01-07T12:46:32+00:00", "exp": "2025-01-14T12:46:51+00:00", "cap": [ "todo-create", "todo-show" ] }

Klíč

Typ

Popis

sub

int

Subject = ID uživatele

name

string

Jméno uživatele

email

string

E-mail uživatele

ins

int (možná nějaký jiný identifikátor)

Identifikátor SaaS instance, ke které je uživatel aktuálně přihlášený.

iat

datetime

Issued at = datum vystavení JWT

exp

datetime

Expiry = datum platnosti. Je třeba validovat!

cap

string[]

Capabilities = seznam práv uživatele (viz autorizace)

Signature (hash):

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), <SECRET KEY> )

FrontEnd modul zajišťuje předávání JWT v Authorization hlavičce požadavku jako Bearer token. Modulu pro autorizaci stačí dekódovat token na jeho části a ověřit podpis.

Pro práci s JWT existují knihovny, ale reálně to není nic extra složitého (tutorial). Nejkoplikovanější je ověření toho podpisu.

Autorizace

Každý modul definuje své " capabilities " (jen nějaký unikátní string), které se dají získat přes API endpoint (GET /api/capabilities). Ty si bude Auth modul automaticky stahovat a ukládat, aby potom šli přiřadit k jednotlivým rolím (resp. uživatelům).

Ověření potom probíhá v proti JWT (např. pokud paylod.cap[] obsahuje todo-create). V Laravelu asi ideálně řešit nějak pomocí Gates a Policies.

Alternativně může být ověření přímo dotazem na API auth modulu.

Capabilities endpoint

GET /api/capabilities vrací seznam všech nastavitelných práv, které modul umožňuje nastavit.

Odpověď modulu musí vracet JSON objekt. Např.

{ "todo-admin": { "description": "Umožňuje provádět všechny operace v TODO modulu." }, "todo-manage": { "description": "Umožňuje všechny operace v todo skupině.", "parent": "todo-admin" }, "todo-read-all": { "description": "Umožňuje zobrazovat všechny todo", "parent": "todo-manage" }, "todo-read-own": { "description": "Umožňuje zobrazovat jen své todo", "parent": "todo-manage" }, "todo-create": { "description": "Umožňuje vytvářet todo", "parent": "todo-manage" }, "todo-delete": { "description": "Umožňuje mazat todo", "parent": "todo-manage" } }
  • Klíč objektu je unikátní string, který identifikuje práva uživatele.

    • Je žádoucí, aby identifikátory byly co nejkradší. Proto se může např místo todo-read-own použít todo-ro nebo jen tdro, pokud bude unikátní napříč moduly.

    • Unikátnost bude kontrolovat i Auth modul

  • Volitelně může mít i popis, který se zobrazuje v nastavení rolí.

  • Volitelně se můžou hierarchicky strukturovat (parent)

    • Pokud má uživatel parent práva, má automaticky i všechny child práva.

Last modified: 06 února 2025