8

Zgodnie ze specyfikacją REST usługa powinna być bezpaństwowcem; ale wtedy trudno jest włączyć uwierzytelnianie. Niektóre z artykułów, które przeczytałem, mówiły: "URUCHOMIENIE stanowe nie jest końcem świata". Ale nie o to chodzi, chodzi o to, by przestrzegać specyfikacji i być konsekwentnym.Uwierzytelnianie usługi RESTful

Tak, zadaję to pytanie tutaj w nadziei, że ktoś może mnie poprowadzić we właściwym kierunku. Pracuję z Spring MVC, aby utworzyć usługę REST. Nie mam widoków. Jest to prawdziwa usługa REST, która zużywa/produkuje JSON. Potrzebuję mechanizmu uwierzytelniania (i autoryzacji w dół drogi) dla tej aplikacji, która jest bezstanowa i stosuje się do specyfikacji REST. Klient zostanie napisany w języku JavaScript (Backbone.js, CoffeeScript) i zaakceptuje nazwę użytkownika/hasło od użytkownika. Następnie opublikuje te informacje na serwerze.

Jak uzyskać prawdziwe uwierzytelnianie bezstanowe (i autoryzację) w aplikacji opartej na Spring?

Ulepszone uwierzytelnianie przez SSL - Czy to jest sposób na wykonanie?

+1

Co to jest "specyfikacja REST", o której mówisz? Jest to wzorzec projektowy i zestaw wytycznych, a nie specyfikacja. – skaffman

Odpowiedz

2

Zarządzanie sesjami różni się od zarządzania państwem.

Po stronie serwera podczas uzgadniania można wygenerować token i za każdym razem, gdy klient nawiąże połączenie, będzie musiał dodać token albo do głowy, albo gdzie serwer może przeanalizować i zdecydować, czy można zezwolić na zadzwoń, aby kontynuować.

Serwer nie musi utrzymywać żadnego stanu, aby sprawdzić ważność tego tokena, który można wykonać za pomocą jakiegoś algorytmu.

+0

Jak można to osiągnąć po stronie serwera? –

+0

ale jeśli algorytm jest w jakiś sposób pęknięty, token może zostać wysłany w celu uzyskania dostępu do zasobów – jsf

+0

Powinieneś również zaszyfrować token, który może być po prostu hashowany lub posypany hash;) (w zasadzie hash z hashem). I to tam zerowa ochrona dnia wciąga, ale jeśli używasz standardowego algorytmu szyfrowania i ktoś go łamie, to dla przemysłu jest poważniejszy problem niż twoja własna aplikacja. Używanie SSL zapewni, że pakiety będą niezakodowane, ale używanie SSL nie jest konieczne. Widzieliśmy, jak FBI, Jboss i Sony itd. Dostały się na kompromis, więc tak, to nie jest niemożliwe, ale stosowanie standardowych dobrych praktyk sprawi, że przeciętny joe nie będzie mógł się z nim włamać. – Shahzeb

2

Czy sprawdziłeś, jak działa Spring Security? Korzystając ze Spring Security, udało mi się dodać niestandardowe nagłówki autoryzacji HTTP od klienta w żądaniu REST. To jest wyodrębniona strona serwera, użytkownik żądający jest uwierzytelniony i można autoryzować dostęp do określonych zasobów.

1

Można używać uwierzytelniania podstawowego lub szyfrowanego przez SSL, z których żadna nie oznacza niczego znaczącego na temat stanu. Może również być plik cookie odesłany przez serwer, który twój klient będzie musiał odesłać, gdy będzie wysyłać więcej próśb (I wierzę, że, że kod JavaScript zajmie się tym wszystkim). Możliwe są inne mechanizmy uwierzytelniania, ale są one bardziej złożone i niekoniecznie odpowiednie. (Drugim kluczem, który jest prawidłowy bez statu, jest uwierzytelniony przez klienta protokół SSL, ale to wymaga, aby przeglądarka miała zainstalowaną klientową klauzulę SSL i aby serwer wiedział, co oznacza ta tożsamość, a jej wdrożenie jest nieco bardziej skomplikowane.)

Po stronie serwera użyj Spring Security, ponieważ to sprawia, że ​​obsługa wszystkich tych rzeczy jest łatwa. Działa dobrze ze Spring MVC.

Powiązane problemy