tldr: Nowa seria – robimy ogame.
Ostatnio dla zabawy próbowałem stworzyć lekki webowy frontend do bazy danych (z losowo wygenerowanymi użytkownikami) przy użyciu JQuery i Spring Boota z MongoDB po stronie serwera. Całkiem i się to spodobało i teraz w głowie mam większy pomysł, czyli stworzenie chociaż najbardziej badziewnego, ale działającego massively multiplayer online strategic game (ogame/plemiona/ikariam etc). Bazy danych + technologie webowe wyglądają znacznie lepiej w parze, jeśli patrzeć pod kątem CV, a wydaje mi się że zasadniczo dobrze jest umieć na jakimś poziomie zwizualizować backend. Zacznijmy więc może od przedstawienia kilku problemów które będą po drodze.
Problemy i research
W jaki sposób serwer będzie wiedział, kiedy może odesłać przeglądarce stronę dostępną tylko dla zalogowanych, a kiedy nie, a bardziej ogólnie: skąd wie, czy użytkownik jest zalogowany?
Z tego co wygooglowałem i sam się domyśliłem, wygląda to tak:
Użytkownik loguje się pomyślnie na stronie (hash hasła z jego formularza pokrywa się z tym w bazie danych), na serwerze zostaje wygenerowany unikatowy token i zapisany w bazie danych razem z adresem IP osoby która się zalogowała a także datą wygaśnięcia tokena. Do tej samej osoby, odsyłany jest token, zapisywany jest w formie ciasteczka, a następnie kiedy tylko ta osoba zażąda strony, która dostępna jest tylko dla zalogowanych, serwer porówna token przesłany z ciasteczek oraz adres IP, jeśli wszystko się zgadza, to odsyła stronę, jeśli nie, redirect na stronę logowania.
Na co warto rzucić okiem:
https://pl.wikipedia.org/wiki/HTTP_cookie
https://blog.risingstack.com/web-authentication-methods-explained/
https://security.stackexchange.com/questions/755/how-does-basic-http-auth-work
http://viralpatel.net/blogs/spring-mvc-cookie-example/
http://stackoverflow.com/questions/12050059/user-session-tracking-in-javascript
Trzymanie haseł
Minimum bezpieczeństwa, czyli trzymanie hashy. Samo przesyłanie informacji z przeglądarki na serwer również powinno być jakoś zabezpieczane:
https://stackoverflow.com/questions/4101440/jquery-sending-password-via-ajax
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
Wygląd strony
Jestem w tym zielony (nie znam niczego poza CSS, HTML), ale póki co nie przejmuję się tym, frontend wyjdzie po drodze i będę wyszukiwał na bieżąco gdy tylko znajdzie się czas. Co do tego, znalazłem całkiem fajną stronę:
https://uptodate.frontendrescue.org/
Materiały do nauki
Okazuje się, że w sieci jest całkiem sporo opensourcowych klonów Ogame, przykładowa lista:
https://freevps.us/thread-7746.html
W razie problemów, będe zaglądał w kod.
Oczywiście wszystko krok po kroku, zanim dojdziemy do pierwszego prototypu minie czas i jestem świadom że nie zrobię wszystkiego powyższego w jeden weekend.
Gdy zaczniemy pisać kod do tej serii, udostępnię go na moim Githubie: