Pokud aplikace se vzdáleným serverem komunikuje čistě jen kvůli stažení veřejných dat (ta, co jsou pro všechny stejná/může je prohlížet kdokoliv), tak pak není co řešit. Nemusím se prokazovat, kdo jsem, nemusím si to hlídat a hlavně se nemusím bát, že mi data někdo ukradne. Komplikovanější to však nastává velmi záhy a to, když potřebujeme vědět, kdo data chce a jestli k nim má přístup. Stejně tak pokud používá určité funkce na serveru, které vyžadují oprávnění, například když chci z mobilu poslat na server příspěvek.
Základním a nejpoužívanějším způsobem autentizace je uživatelské jméno a heslo. A je jedno, jestli je to přezdívka, email nebo přidělený kód. Hlavní myšlenka je v tom, že tuto kombinací může znát jen příslušný uživatel, čímž prokáže totožnost.
Prvním předpokladem k zabezpečení aplikace je použití šifrovaného spojení, např. přes HTTPS. Pokud se to nepoužije, vše se posílá v nezašifrované textové podobě. A když pak nějaký zlý drban ukořistí paket obsahující právě jméno a heslo, což třeba na Wi-Fi není žádný problém, tak je problém.
Další užitečnou věcí je neposílat jméno a heslo pořád dokola. Je potřeba předpokládat, že stát se může cokoliv a čím víckrát jméno a heslo projde Internetem, tím spíš ho někdo „čmajzne“. To můžeme nahradit nějakým tokenem, který uživateli vrátíme na základě autentizace. Ten může mít také třeba nějakou expiraci, stejně tak není problém ho kdykoliv zrušit. Opět, i když máme token, stejně potřebujeme šifrovanou komunikaci, to je zkrátka základ. Jinak ani nemá cenu cokoliv zaheslovat.
Když máme na serveru požadavek, tak musíme zjistit, komu patří. Tak vezmeme token nebo přihlašovací údaje a vydáme se je hledat do databáze. Ty po chvíli najdeme a pro daného uživatele jdeme hledat oprávnění. No a až ho najdeme, tak ověříme, že opravdu může udělat to, co chce, operaci provedeme a vše slastně zapomeneme. A za 5 vteřin si dáme celé kolečko znova, protože přišel další požadavek. A pak znova a znova. A vše stojí výpočetní čas.
Je pravda, že u některých aplikací se tomuto nevyhneme, zkrátka vždy se musíme podívat, jestli daný uživatel může udělat to, co chce. Ale pak jsou případy, kdy to není tolik potřeba a jde to udělat elegantnějším způsobem. A to tím, že jak se uživatel autentizuje, vrátíme mu obsáhlejší informaci, kterou se autorizuje a ta obsahuje jeho identitu (např. uživatelské ID) a vše, co může dělat (třeba přidat článek do blogu). A už nemusím vše znova a znova hledat.
Ale jak zajistit, že nás nebude tahat za serverovou fusekli a nepošle nám zkrátka, co chce? Tak si to podepíšeme. Ideálně se nám na to hodí technologie JWT – JSON Web Token. Ve zkratce se jedná o informace (v podstatě libovolné, co potřebujeme), které dáme uživateli po ověření a kterými se v každém požadavku prokazuje. Výhoda tohoto tokenu je, že se přenáší zakódovaný, lze ho rozkódovat a přečíst a je podepsán vystavitelem, takže máme možnost, jak ověřit, že je pravý. A právě takovýto mechanizmus se nám hodí i do mobilních aplikací, kde obzvláště je většina přihlášeních trvalá a my nemusíme ukládat heslo pro ověření.
Takže pokud chceme mít bezpečnou aplikací, tak se bez šifrované komunikace (HTTPS) neobejdeme vůbec. O to více je udivující, kolik mobilních aplikací to nerespektuje. Dále potřebujeme autentizovat uživatele, ale zároveň co nejméně přenášet jeho heslo. Na to se nám skvěle hodí tokeny, ať už s potřebou pokaždé ho na straně serveru validovat a nebo JWT, kde jsou všechny informace bezpečně uloženy v tokenu samotném.
https://jwt.io/
http://www.businessit.cz/cz/9-10-mobilnich-aplikaci-ma-bezpecnostni-slabiny.php