Buduję aplikację, która będzie hostowana na serwerze. Chcę zbudować interfejs API dla aplikacji, aby ułatwić interakcję z dowolnej platformy (aplikacja internetowa, aplikacja mobilna). Nie rozumiem tego, że w przypadku używania interfejsu API REST, w jaki sposób uwierzytelniamy użytkownika.
Na przykład, gdy użytkownik zaloguje się, a następnie chce utworzyć temat na forum. Skąd mam wiedzieć, że użytkownik jest już zalogowany?
Authorization
nagłówek + np. Nagłówek localStorage VS wCookie
przeglądarce + standardowe przechowywanie plików cookie w przeglądarce.Odpowiedzi:
Możesz użyć uwierzytelniania podstawowego lub szyfrowanego HTTP. Możesz bezpiecznie uwierzytelniać użytkowników za pomocą protokołu SSL, jednak spowalnia to nieco interfejs API.
OAuth jest najlepszym, co można uzyskać. Zaletami oAuth jest token, który można odwołać lub wydłużyć. Zobacz, jak wdrożyć: Link roboczy z komentarzy: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
źródło
Na przykład, gdy użytkownik ma login. Teraz powiedzmy, że użytkownik chce utworzyć temat na forum. Skąd mam wiedzieć, że użytkownik jest już zalogowany?
Pomyśl o tym - musi być jakiś uścisk dłoni, który mówi Twojemu interfejsowi API „Utwórz forum”, że to bieżące żądanie pochodzi od uwierzytelnionego użytkownika. Ponieważ interfejsy API REST są zwykle bezstanowe, stan musi gdzieś zostać utrwalony . Twój klient korzystający z interfejsów API REST jest odpowiedzialny za utrzymanie tego stanu. Zwykle jest to jakiś token, który jest przekazywany od momentu zalogowania użytkownika. Jeśli token jest dobry, Twoje żądanie jest dobre.
Sprawdź, jak Amazon AWS wykonuje uwierzytelnienia. To doskonały przykład „przekazywania złotówki” z jednego interfejsu API na inny.
* Pomyślałem o dodaniu praktycznej odpowiedzi do mojej poprzedniej odpowiedzi. Wypróbuj Apache Shiro (lub dowolną bibliotekę uwierzytelniania / autoryzacji). Podsumowując, staraj się unikać niestandardowego kodowania. Po zintegrowaniu ulubionej biblioteki (używam Apache Shiro, btw) możesz wykonać następujące czynności:
/api/v1/login
iapi/v1/logout
JSESSIONID
) wysyłany z powrotem do klienta (internet, telefon komórkowy, cokolwiek)/api/v1/findUser
To wszystko. Mam nadzieję że to pomoże.
źródło
Użyj uwierzytelniania podstawowego HTTP do uwierzytelniania klientów, ale traktuj nazwę użytkownika / hasło tylko jako tymczasowy token sesji .
Token sesji jest tylko nagłówkiem dołączonym do każdego żądania HTTP, np .:
Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0
Ciąg Ym9ic2Vzc2lvbjE6czNjcmV0 powyżej jest tylko ciągiem „bobsession1: s3cret” (który jest nazwą użytkownika / hasłem) zakodowanym w Base64.
Aby uzyskać powyższy token sesji tymczasowej, podaj funkcję API (np .
http://mycompany.com/apiv1/login
:), która pobiera nazwę użytkownika i hasło administratora jako dane wejściowe, tworzy tymczasową nazwę użytkownika / hasło uwierzytelniania podstawowego HTTP po stronie serwera i zwraca token (np .: Ym9ic2Vzc2lvbjE6czNjcmV0). Ta nazwa użytkownika / hasło powinno być tymczasowe, powinno wygasnąć po około 20 minutach.Aby zwiększyć bezpieczeństwo, upewnij się, że usługa REST jest obsługiwana przez HTTPS, aby informacje nie były przesyłane jako zwykły tekst
Jeśli korzystasz z Javy, biblioteka Spring Security zapewnia dobrą obsługę implementacji powyższej metody
źródło
Myślę, że najlepszym rozwiązaniem jest użycie OAuth2. Google go, a znajdziesz wiele przydatnych postów, które pomogą Ci to skonfigurować.
Ułatwi to tworzenie aplikacji klienckich dla Twojego interfejsu API z aplikacji internetowej lub mobilnej.
Mam nadzieję, że to ci pomoże.
źródło
Korzystam z uwierzytelniania JWT. Działa dobrze w mojej aplikacji.
Istnieje metoda uwierzytelniania, która wymaga poświadczeń użytkownika. Ta metoda sprawdza poprawność poświadczeń i zwraca token dostępu w przypadku powodzenia.
Ten token musi zostać wysłany do każdej innej metody w moim interfejsie API sieci Web w nagłówku żądania.
Jest dość łatwy do wdrożenia i bardzo łatwy do przetestowania.
źródło