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:
Header:
Klíč | Typ | Popis |
|---|---|---|
| string | Pracovat budeme jen s hodnotou |
| string |
|
Payload:
Klíč | Typ | Popis |
|---|---|---|
| int |
|
| string | Jméno uživatele |
| string | E-mail uživatele |
| int (možná nějaký jiný identifikátor) | Identifikátor SaaS instance, ke které je uživatel aktuálně přihlášený. |
| datetime |
|
| datetime |
|
| string[] |
|
Signature (hash):
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ř.
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-ownpoužíttodo-ronebo jentdro, 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
parentpráva, má automaticky i všechnychildpráva.