Vždycky když musím použít nějakou věc a zdá se mi až moc složitá, přemýšlím, jak udělat to samé co nejvíc Keep it simple.
Use case je takovýto. Mám nějaký backend, jedno v čem napsaný, a chci mu zaheslovat REST. Frontend je zcela zvlášť, v javascriptu. První věc, která mě napadla, úplně primitivní, je udělat tohle:
GET
https://localhost:8080/loginDo http-body dám heslo a username. Protože je to https, http-body bude zašifrované a můžu tam tedy to heslo natvrdo poslat.
Response na ten GET bude klíč, securityKey, který budu následně vždy přidávat do http-body jako parametr. Opět, https se postará, že klíč nebude viditelný odposlouchávačům. V backendu tam dám něco na způsob design patternu Filter Chain pro zpracování requestů a vždy se podívám, jestli klíč v http-body je aktuálně validní klíč a když není, vrátím error msg.
No a to je všechno, v základu to je hotové. Můžu pak dodělávat drobnosti, jakože klíč bude mít časově omezenou platnost, která se obnoví při každém dalším requestu s tímto klíčem, ale to už jsou opravdu jen detaily zajišťující komfort uživatele.
Další věc, jako třeba uložení klíče někam do Cookies pro případ, že se znovu otevře Browser, už si bude řešit ten frontend sám, opět, jedná se o detail spadající do kategorie komfort pro uživatele. Securita tak jak jsem ji popsal mi přijde zcela hotová a snad je i bezpečná.
No a tohle je Keep it simple řešení. Přesto, Security v praxi bývají docela molochy a mám teď na mysli Spring Boot Security, která mi zhoršila start aplikace tak o 15% a o dalších 15% mi zvětšila výstupní Jar-with-dependencies.
Takže si říkám, co je tam asi tak všechno u velkých SW potřeba udělat pro to zabezpečení a proč to nejde takhle jednoduše?