Zastrzeżenie: Jestem nowy w szkole myślenia REST i staram się to ogarnąć.
Tak więc czytam tę stronę, Częste błędy REST i stwierdziłem, że jestem całkowicie zaskoczony tym, że sekcja dotycząca sesji jest nieistotna. Oto, co mówi strona:
Klient nie powinien się „logować” ani „uruchamiać połączenia”. Uwierzytelnianie HTTP odbywa się automatycznie dla każdej wiadomości. Aplikacje klienckie są konsumentami zasobów, a nie usług. Dlatego nie ma się do czego logować! Powiedzmy, że rezerwujesz lot w serwisie internetowym REST. Nie tworzysz nowego połączenia „sesji” z usługą. Zamiast tego należy poprosić „obiekt kreatora trasy” o utworzenie nowego planu podróży. Możesz zacząć wypełniać puste miejsca, ale potem pobierz zupełnie inny komponent z innego miejsca w sieci, aby wypełnić inne puste miejsca. Nie ma sesji, więc nie ma problemu z migracją stanu sesji między klientami. Nie ma również problemu z „koligacją sesji”
OK, rozumiem, że uwierzytelnianie HTTP jest wykonywane automatycznie dla każdej wiadomości - ale jak? Czy nazwa użytkownika / hasło są wysyłane z każdym żądaniem? Czy to nie tylko zwiększa powierzchnię ataku? Czuję, że brakuje mi części układanki.
Czy nie byłoby źle mieć, powiedzmy, usługę REST /session
, która akceptuje żądanie GET, w której podałbyś nazwę użytkownika / hasło jako część żądania i zwraca token sesji, jeśli uwierzytelnianie się powiodło, to może być wtedy przekazane wraz z kolejnymi wnioskami? Czy to ma sens z punktu widzenia REST, czy to nie ma sensu?