Jaka jest różnica między uwierzytelnianiem za pomocą tokena a uwierzytelnianiem za pomocą plików cookie?
Próbuję wdrożyć demo Ember Auth Rails, ale nie rozumiem powodów używania uwierzytelniania tokenów, jak opisano w FAQ Ember Auth na pytanie "Dlaczego uwierzytelnianie tokenem?"
Odpowiedzi:
Typowa aplikacja internetowa jest w większości bezstanowa ze względu na charakter żądania / odpowiedzi . Protokół HTTP jest najlepszym przykładem protokołu bezstanowego . Ale ponieważ większość aplikacji internetowych potrzebuje stanu , aby utrzymać stan między serwerem a klientem, używane są pliki cookie, które serwer może wysłać w każdej odpowiedzi z powrotem do klienta. Oznacza to, że następne żądanie wysłane przez klienta będzie zawierało ten plik cookie i tym samym zostanie rozpoznane przez serwer. W ten sposób serwer może utrzymywać sesję z bezstanowym klienta, wiedząc, głównie wszystko o aplikacji stanie , ale przechowywane na serwerze. W tym scenariuszu klient w żadnym momencie nie zatrzymuje sięstan , co nie jest sposobem działania Ember.js .
W Ember.js jest inaczej. Ember.js ułatwia pracę programisty, ponieważ rzeczywiście utrzymuje stan dla Ciebie, w kliencie, wiedząc w każdej chwili o jego stanie bez konieczności wysyłania żądania do serwera z prośbą o dane o stanie .
Jednak utrzymywanie stanu w kliencie może czasami powodować problemy ze współbieżnością, które po prostu nie występują w sytuacjach bezstanowych . Jednak Ember.js zajmuje się również tymi problemami dla Ciebie, w szczególności ember-data jest tworzony z myślą o tym. Podsumowując, Ember.js to framework przeznaczony dla klientów stanowych .
Ember.js nie działa jak typowa bezstanowa aplikacja internetowa, w której sesja , stan i odpowiednie pliki cookie są prawie w całości obsługiwane przez serwer. Ember.js przechowuje swój stan całkowicie w javascript (w pamięci klienta, a nie w DOM, jak niektóre inne frameworki) i nie potrzebuje serwera do zarządzania sesją. Powoduje to, że Ember.js jest bardziej wszechstronny w wielu sytuacjach, np. Gdy aplikacja jest w trybie offline.
Oczywiście ze względów bezpieczeństwa wymaga wysyłania do serwera jakiegoś tokena lub unikalnego klucza za każdym razem, gdy żądanie jest uwierzytelniane , w ten sposób serwer może wyszukać token wysyłania (który został pierwotnie wydany przez serwer) i sprawdź, czy jest ważny przed wysłaniem odpowiedzi z powrotem do klienta.
Moim zdaniem głównym powodem używania tokena uwierzytelniania zamiast plików cookie, jak podano w Ember Auth FAQ, jest przede wszystkim natura frameworka Ember.js, a także dlatego, że bardziej pasuje on do paradygmatu stanowych aplikacji internetowych. Dlatego mechanizm plików cookie nie jest najlepszym podejściem do budowania aplikacji Ember.js.
Mam nadzieję, że moja odpowiedź nada Twojemu pytaniu więcej sensu.
źródło
Http jest bezpaństwowy. Aby Cię autoryzować, musisz „podpisać” każde żądanie, które wysyłasz do serwera.
Uwierzytelnianie za pomocą tokena
Żądanie do serwera podpisywane jest „tokenem” - zwykle oznacza to ustawienie określonych nagłówków http, jednak można je przesłać w dowolnej części żądania http (treść POST itp.)
Plusy:
<img src="http://bank.com?withdraw=1000&to=myself" />
, a jeśli jesteś zalogowany za pomocą uwierzytelniania plików cookie do bank.com, a bank.com nie ma żadnych możliwości XSRF ochrony, wypłacę pieniądze z Twojego konta po prostu przez fakt, że Twoja przeglądarka uruchomi autoryzowane żądanie GET na ten adres URL.) Pamiętaj, że istnieją środki zapobiegające fałszerstwom, które możesz wykonać z uwierzytelnianiem opartym na plikach cookie - ale musisz je wdrożyć.Uwierzytelnianie plików cookie
Ogólnie rzecz biorąc, powiedziałbym, że tokeny zapewniają lepszą elastyczność (ponieważ nie jesteś ograniczony do jednej domeny). Wadą jest to, że musisz samodzielnie wykonać kodowanie.
źródło
Are send out for every single request
Żetony są wysyłane również na każde żądanieTokeny muszą być gdzieś przechowywane (pamięć lokalna / sesyjna lub pliki cookie)
Tokeny mogą wygasać jak pliki cookie, ale masz większą kontrolę
Przechowywanie lokalne / sesyjne nie będzie działać między domenami, użyj pliku cookie znacznika
Żądania inspekcji wstępnej będą wysyłane przy każdym żądaniu CORS
Kiedy chcesz coś przesyłać strumieniowo, użyj tokena, aby uzyskać podpisane żądanie
Łatwiej poradzić sobie z XSS niż XSRF
Token jest wysyłany na każde żądanie, uważaj na jego rozmiar
Jeśli przechowujesz poufne informacje, zaszyfruj token
Tokeny sieciowe JSON mogą być używane w OAuth
Tokeny nie są srebrnymi kulami, pomyśl dokładnie o przypadkach użycia autoryzacji
http://blog.auth0.com/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/
http://blog.auth0.com/2014/01/07/angularjs-authentication-with-cookies-vs-token/
źródło
Dla pracowników Google :
PAŃSTWOWOŚĆ
MECHANIZMY
Authorization
tylko nagłówki bez specjalnego traktowania, klient musi zarządzać wszystkimi aspektami transferuPORÓWNANIE PAŃSTWOWE
hash(data + secret key)
, skąd tajny klucz jest znany tylko serwerowi, dzięki czemu można zweryfikować integralność danych tokenaPORÓWNANIE MECHANIZMU
httpOnly
uniemożliwiający dostęp klienta do JavaScriptPODSUMOWAĆ
Połączyć
źródło
Uważam, że jest tu pewne zamieszanie. Istotna różnica między uwierzytelnianiem opartym na plikach cookie a tym, co jest teraz możliwe dzięki HTML5 Web Storage, polega na tym, że przeglądarki są zbudowane tak, aby wysyłać dane plików cookie za każdym razem, gdy żądają zasobów z domeny, która je ustawiła. Nie możesz temu zapobiec bez wyłączania plików cookie. Przeglądarki nie wysyłają danych z Web Storage, chyba że wysyła je kod na stronie . Strony mogą uzyskiwać dostęp tylko do przechowywanych przez siebie danych, a nie do danych przechowywanych przez inne strony.
Tak więc użytkownik martwi się sposobem, w jaki jego dane z plików cookie mogą być wykorzystywane przez Google lub Facebook, może wyłączyć pliki cookie. Ale mają mniej powodów, by wyłączać Web Storage (dopóki reklamodawcy nie wymyślą sposobu, jak z tego skorzystać).
Na tym polega różnica między opartymi na plikach cookie a tokenami, przy czym ta ostatnia korzysta z magazynu internetowego.
źródło
Uwierzytelnianie oparte na tokenach jest bezstanowe, serwer nie musi przechowywać informacji o użytkowniku w sesji. Daje to możliwość skalowania aplikacji bez martwienia się o to, gdzie zalogował się użytkownik. Istnieje koligacja Web Server Framework dla plików cookie, ale nie jest to problem w przypadku korzystania z tokenów. Tak więc ten sam token może być użyty do pobrania bezpiecznego zasobu z domeny innej niż ta, do której jesteśmy zalogowani, co pozwala uniknąć kolejnego uwierzytelnienia uid / pwd.
Bardzo dobry artykuł tutaj:
http://www.toptal.com/web/cookie-free-authentication-with-json-web-tokens-an-example-in-laravel-and-angularjs
źródło
Użyj tokena, gdy ...
Federacja jest pożądana. Na przykład chcesz użyć jednego dostawcy (dystrybutora tokenów) jako wystawcy tokenu, a następnie użyć serwera API jako walidatora tokenu. Aplikacja może uwierzytelnić się w Token Dispensor, otrzymać token, a następnie przedstawić ten token na serwerze API w celu weryfikacji. (To samo działa z logowaniem przez Google. Lub Paypal lub Salesforce.com itd.)
Wymagana jest asynchronia. Na przykład chcesz, aby klient wysłał żądanie, a następnie gdzieś je przechował, aby „później” wykonać na nim osobny system. Ten oddzielny system nie będzie miał połączenia synchronicznego z klientem i może nie mieć bezpośredniego połączenia z centralną dystrybucją tokenów. token JWT może zostać odczytany przez asynchroniczny system przetwarzania w celu ustalenia, czy element pracy może i powinien zostać wykonany w późniejszym czasie. Jest to w pewnym sensie związane z powyższą ideą Federacji. Uważaj jednak: JWT wygasa. Jeśli kolejka przechowująca element pracy nie zostanie przetworzona w okresie istnienia tokena JWT, oświadczenia nie powinny już być zaufane.
Żądanie podpisane przez klienta jest wymagane. Tutaj żądanie jest podpisywane przez klienta przy użyciu jego klucza prywatnego, a serwer sprawdza poprawność przy użyciu już zarejestrowanego klucza publicznego klienta.
źródło
Jedną z głównych różnic jest to, że pliki cookie podlegają Polityce tego samego pochodzenia, podczas gdy tokeny nie. Stwarza to wszelkiego rodzaju efekty w dół strumienia.
Ponieważ pliki cookie są wysyłane tylko do iz określonego hosta, host ten musi ponosić ciężar uwierzytelnienia użytkownika, a użytkownik musi utworzyć konto z danymi bezpieczeństwa na tym hoście, aby można było je zweryfikować.
Z drugiej strony tokeny są wydawane i nie podlegają tym samym zasadom pochodzenia. Emitentem może być dosłownie każdy i to do hosta należy decyzja, którym emitentom zaufać. Wystawca, taki jak Google i Facebook, jest zwykle bardzo zaufany, więc gospodarz może przenieść ciężar uwierzytelniania użytkownika (w tym przechowywania wszystkich danych bezpieczeństwa użytkownika) na inną stronę, a użytkownik może skonsolidować swoje dane osobowe u określonego wystawcy i nie musi pamiętać kilka różnych haseł dla każdego hosta, z którym współpracują.
Pozwala to na pojedyncze logowanie w scenariuszach, które zmniejszają ogólne tarcia w środowisku użytkownika. Teoretycznie sieć staje się również bezpieczniejsza, ponieważ wyspecjalizowani dostawcy tożsamości pojawiają się, aby świadczyć usługi uwierzytelniania, zamiast uruchamiać wszystkie witryny internetowe ma i pa w swoich własnych, prawdopodobnie na wpół upieczonych systemach uwierzytelniania. A ponieważ dostawcy ci wychodzą, koszt zapewnienia bezpiecznych zasobów sieciowych nawet dla bardzo podstawowych zasobów spada do zera.
Ogólnie rzecz biorąc, tokeny zmniejszają tarcia i koszty związane z zapewnianiem uwierzytelniania i przenoszą ciężar różnych aspektów bezpiecznej sieci na scentralizowane strony, które są w stanie lepiej wdrażać i utrzymywać systemy bezpieczeństwa.
źródło