Tworzę prosty interfejs API za pomocą Rails API i chcę się upewnić, że jestem na dobrej drodze. Używam devise do obsługi logowań i zdecydowałem się na token_authenticatable
opcję Devise , która generuje klucz API, który musisz wysłać z każdym żądaniem.
Łączę API z front-endem szkieletowym / marionetkowym i ogólnie zastanawiam się, jak mam obsługiwać sesje. Moją pierwszą myślą było po prostu przechowywanie klucza API w pamięci lokalnej lub pliku cookie i pobieranie go podczas ładowania strony, ale coś w przechowywaniu klucza API w ten sposób przeszkadzało mi z punktu widzenia bezpieczeństwa. Czy nie byłoby łatwo złapać klucz API, przeszukując lokalną pamięć / plik cookie lub węsząc każde żądanie, które przechodzi i używać go do podszywania się pod tego użytkownika w nieskończoność? Obecnie resetuję klucz API przy każdym logowaniu, ale nawet to wydaje się częste - za każdym razem, gdy logujesz się na dowolnym urządzeniu, oznacza to, że będziesz wylogowywany na każdym innym, co jest trochę uciążliwe. Gdybym mógł porzucić ten reset, czuję, że poprawiłby się z punktu widzenia użyteczności.
Mogę się tu całkowicie mylić (i mam nadzieję, że się mylę), czy ktoś może wyjaśnić, czy uwierzytelnianie w ten sposób jest niezawodnie bezpieczne, a jeśli nie, jaka byłaby dobra alternatywa? Ogólnie rzecz biorąc, szukam sposobu, w jaki mogę bezpiecznie utrzymywać użytkowników „zalogowanych” w dostępie do interfejsu API bez częstego wymuszania ponownego uwierzytelniania.
źródło
urlsafe_base64
generuje ciąg bezpieczny dla adresu URL. Wszystko jest w nazwie. Jeśli nie chcesz używać tokena w swoim adresie URL ( czego nie powinieneś ), użyjhex
.Zgodnie z plikiem README projektu, klejnot devise_token_auth został zainspirowany tym postem StackOverflow: https://github.com/lynndylanhurley/devise_token_auth
źródło
Możesz spróbować użyć rails4 ze swoim API, zapewnia większe bezpieczeństwo i używa devise 3.1.0rc
W Railsach 4.0 kilka funkcji zostało wyodrębnionych w postaci klejnotów.
http://blog.envylabs.com/post/41711428227/rails-4-security-for-session-cookies
Devise 3.1.0.rc działa na obu Railsach 3.2 i Railsach 4.0. http://blog.plataformatec.com.br/2013/08/devise-3-1-now-with-more-secure-defaults/
Devise jest przestarzałą
TokenAuthenticatable
wersją 3.1.0rc, ale możesz zbudować własnąTokenAuthenticatable
metodę na problemy z bezpieczeństwem. Jest bardziej niezawodny i bezpieczny.Aby uzyskać token, magazyn sesji, możesz przejść przez http://ruby.railstutorial.org/chapters/sign-in-sign-out i http://blog.bigbinary.com/2013/03/19/cookies-on-rails .html, aby był bardziej zrozumiały.
W końcu powinieneś przejść przez ten rodzaj szyfrowania i deszyfrowania „ Nie można odszyfrować przechowywanych zaszyfrowanych danych ”, aby uzyskać większe bezpieczeństwo.
źródło