7

KONTEKST:Token uwierzytelniania Ember.js dla Ember-Data + AMS => JSON lub nagłówek HTTP?

Mam aplikację Ember.js 1.1.0-beta.1, która wymienia dane JSON z serwerem Rails-API (Rails 4). Wymiana danych JSON jest realizowana za pomocą Ember-Data 1.0.0-beta.2 i Active Model Serializers 0.8.1 (AMS). Używam domyślnych zalecanych konfiguracji zarówno dla Ember-Data, jak i AMS i jestem zgodny ze specyfikacją JSON-API.

W dowolnym wywołaniu RESTful klient przekazuje bieżący token uwierzytelniający na serwer. Token uwierzytelniania jest weryfikowany i wycofywany, a nowy token uwierzytelniania jest generowany i wysyłany do klienta. W związku z tym każde wywołanie RESTful akceptuje token uwierzytelniający w żądaniu i dostarcza nowy token uwierzytelniający w odpowiedzi, którą klient może buforować i używać do następnego wywołania RESTful.

PYTANIE:

Gdzie mam umieścić token uwierzytelniający w każde żądanie i odpowiedź?

Czy powinien być częścią JSON każdego obiektu w żądaniu i odpowiedzi? Jeśli tak, to gdzie jest token umieszczony w strukturze JSON istniejącego obiektu (który nie ma nic wspólnego z uwierzytelnianiem)?

Czy powinny one zostać umieszczone w nagłówku HTTP dla każdego obiektu żądania i odpowiedzi?

Co to jest "The Ember Way", której można się spodziewać w nowej książce kucharskiej Ember Guides?

więcej kontekstu:

Jestem już zaznajomieni z poniższych linków:

... i szukam odpowiedzi, które wykraczają poza to i są charakterystyczne dla Ember-Data + AMS.

Z wyjątkiem konieczności przechodzić nowy żeton z powrotem do klienta w odpowiedzi poprzez Ember-Data, załóżmy mój kod klient jest inny sposób podobny do @machty przykład Embercast na GitHub: https://github.com/embercasts/authentication-part-2/blob/master/public/js/app.js

Dziękuję bardzo!

Odpowiedz

2

Zbudowałem coś podobnego, chociaż nie resetuję tokena, chyba że użytkownik się wyloguje.

Nie umieściłbym go w treści żądania - po prostu zanieczyścisz swoje modele. Prawdopodobnie nie ma sposobu Ember, ponieważ jest to bardziej kwestia transportu. Token przekazuję za pomocą niestandardowego nagłówka HTTP i/lub pliku cookie. Plik cookie jest potrzebny do autoryzacji pobierania plików, czego nie można zrobić za pomocą ajax, chociaż plik cookie działa również w przypadku wywołań ajaxowych. W twoim przypadku użyłbym cookie i kazał serwerowi ustawić go za każdym razem na nową wartość. Jednak Twój schemat resetowania tokena na każdym żądaniu JSON nie będzie działał na żądanie równoczesne. Czy to naprawdę konieczne? Jeśli korzystasz z TLS, prawdopodobnie nie musisz się tak martwić. Można również pominąć token, aby w przypadku braku żądań przez 10 minut generowany był nowy token.

3

Mam podobny stos - ember, ember-data i rails-api z AMS. W tej chwili właśnie przekazuję token uwierzytelniania (który przechowuję w localStorage) w nagłówku (chociaż można go przekazać w ciągu zapytania), modyfikując metodę RESTAdapter 'ajax.

Moja początkowa myśl polega na uniknięciu resetowania tokena na każde żądanie. Jeśli jesteś szczególnie zaniepokojony tym, że token został wciągnięty, może być łatwiej po prostu zresetować token na serwerze w regularnych odstępach czasu (na przykład 10 minut). Następnie, jeśli jakikolwiek wniosek od klienta nie powiedzie się z powodu starego tokena, po prostu pobierz nowy token (przekazując "tokset", który serwer daje przy logowaniu) i powtórzyć początkowe żądanie.

Jeśli chodzi o to, gdzie umieścić token, tak naprawdę nie ma "Ember Way" - wolę przekazywać go w nagłówku, ponieważ przekazanie go w ciągu zapytania może zepsuć buforowanie i jest również bardziej prawdopodobne, że zostanie zarejestrowane gdzieś po drodze. Zdecydowanie uniknęłbym podania go w treści żądania - byłoby to sprzeczne z oczekiwaniami embera, wyobrażam sobie.

Powiązane problemy