Bob używa aplikacji internetowej, aby coś osiągnąć. I:
- Jego przeglądarka jest na diecie, dlatego nie obsługuje plików cookie .
- Aplikacja internetowa jest popularna, w danym momencie obsługuje wielu użytkowników - musi się dobrze skalować . Tak długo, jak utrzymywanie sesji nałożyłoby ograniczenie na liczbę jednoczesnych połączeń i oczywiście przyniosłoby znaczący spadek wydajności , możemy chcieć mieć system bezsesyjny :)
Kilka ważnych uwag:
- mamy zabezpieczenia transportu ( HTTPS i jego najlepsi przyjaciele);
- za zasłonami aplikacja webowa deleguje wiele operacji do usług zewnętrznych , w imieniu bieżącego użytkownika (systemy te rozpoznają Boba jako jednego ze swoich użytkowników) - oznacza to, że musimy przekazać im dane uwierzytelniające Boba .
A teraz, jak uwierzytelniamy Roberta (przy każdym żądaniu)? Jaki byłby rozsądny sposób na wdrożenie czegoś takiego?
- gra w tenisa z danymi uwierzytelniającymi za pośrednictwem ukrytych pól formularza HTML ... piłka zawiera dane uwierzytelniające ( nazwę użytkownika i hasło ), a dwie rakiety to odpowiednio przeglądarka i aplikacja internetowa. Innymi słowy, możemy przesyłać dane tam iz powrotem za pośrednictwem pól formularzy zamiast plików cookie. Przy każdym żądaniu sieciowym przeglądarka publikuje poświadczenia. Chociaż w przypadku aplikacji jednostronicowej może to wyglądać jak gra w squasha na gumowej ścianie zamiast gry w tenisa , ponieważ formularz sieciowy zawierający dane uwierzytelniające może pozostać żywy przez cały okres istnienia strony internetowej (a serwer zostanie skonfigurowany tak, aby nie oferował z powrotem poświadczeń).
- przechowywanie nazwy użytkownika i hasła w kontekście strony - zmienne JavaScript itp. Wymagana jedna strona, IMHO.
- szyfrowane uwierzytelnianie oparte na tokenach. W takim przypadku logowanie spowodowałoby wygenerowanie zaszyfrowanego tokena bezpieczeństwa (nazwa użytkownika + hasło + coś innego). Ten token zostanie przesłany z powrotem klientowi, a nadchodzącym żądaniom będzie towarzyszył token. Czy to ma sens? Mamy już HTTPS ...
- inne ...
- ostateczność: nie rób tego, przechowuj dane logowania w sesji! Sesja jest dobra. Z ciasteczkami lub bez.
Czy przychodzi Ci na myśl jakiś problem z siecią / bezpieczeństwem w związku z którymkolwiek z wcześniej opisanych pomysłów? Na przykład,
- time-out - możemy zachować znacznik czasu wraz z poświadczeniami (znacznik czasu = czas, w którym Bob wprowadził swoje dane uwierzytelniające). Np. Gdy TERAZ - znacznik czasu> próg , możemy odrzucić żądanie.
- Ochrona przed skryptami między witrynami - nie powinna się w żaden sposób różnić, prawda?
Bardzo dziękuję za poświęcenie czasu na przeczytanie tego :)