2015-07-28 13 views
7

Wprowadzam OAuth (używając rauth) i będę podawał tokeny JWT (używając flask-jwt), javascript frontend (Angular1). Zrobiłem to dla klasycznej aplikacji opartej na plikach cookie/sesjach. To działa. Teraz chcę to zrobić za pomocą tokenów JWT.Jak nadać tokenowi JWT użytkownika po przekierowaniu dostawcy OAuth?

Jeśli dobrze rozumiem, użytkownik jest przekierowywany do dostawcy (np. Google), zalogować się do konta, mój serwer i dostawca robią magię, a następnie dostawca przekieruje użytkownika z powrotem na moją stronę. Teraz mam profil użytkownika, który kończy część OAuth. W normalnej sesji dajesz ciasteczka użytkownika i resztę rzeczy do skonfigurowania sesji, a następnie przekierowujesz go na stronę główną.

To tutaj utknąłem. Czy istnieje jakaś dobra praktyka, jak nadać tokenowi JWT użytkownika po odesłaniu go przez operatora? Przekaż go użytkownikowi jako plik cookie w przekierowaniu na stronę główną? Umieścić go w nagłówku? O ile mi wiadomo, potrzebuję javascript do zapisania tokena w LocalStorage/SessionStorage.

Odpowiedz

6

Pod koniec dnia użytkownik zostanie przekierowany z powrotem do naszej aplikacji, gdzie strona musi zostać wyświetlona. Jedyną opcją którą widzę jest zwrócenie JWT jako pliku cookie, ponieważ nagłówki odpowiedzi nie są dostępne w Javascriptu &, jedynym innym miejscem byłoby osadzenie go w DOM, który otworzyłby go na ataki CSRF.

Gdy przeglądarka jest przekierowywana z dostawcy OAuth, będzie miała tylko kod dostępu, który można wymienić na token dostępu po stronie serwera. Ale najlepsza praktyka mówi, że musisz zachować ten token tajny (nie przesyłać go z powrotem do przeglądarki).

Istnieje wiele dyskusji na temat JWT w plikach cookie w porównaniu do przechowywania lokalnego/sesji, ale w tym przypadku nie widzę żadnej innej opcji niż używanie plików cookie. Wszystkie przypadki użycia, które widziałem, opisują używanie pamięci przeglądarki przy założeniu, że żądanie XHR jest podejmowane w celu uzyskania JWT. Ale nie jest to opcja w przepływie OAuth, ponieważ cała przeglądarka właśnie została przekierowana z powrotem do naszej aplikacji.

Nie widzę innej opcji (dla przypadku użycia OAuth), poza przechowywaniem pliku JWT w pliku cookie do wykorzystania w przyszłych wywołaniach API. Ale może czegoś brakuje.

Powiązane problemy