2016-01-08 27 views
5

Mam instalację aplikacji Express i potrzebuję porady dotyczącej przechowywania tokenów.Węzeł Express - przechowywanie i pobieranie tokenów uwierzytelniania

Otrzymuję token dostępu z serwera OAuth 2 po uwierzytelnieniu konta użytkownika, które następnie będę musiał użyć dla kolejnych żądań api.

Chcę ukryć wartość tokena od klienta i wierzę, że jednym ze sposobów jest zapisanie tokena na serwerze w zakodowanym pliku cookie, tak aby po otrzymaniu dalszych żądań można je było przekierować za pomocą oprogramowania pośredniego i Plik cookie może być następnie użyty do pobrania strony serwera przechowywanego tokenu, a następnie używany jako wartość nagłówka w bieżącym żądaniu do faktycznego punktu końcowego api.

Ktoś już zadał to pytanie - How to store an auth token in an Angular app To jest dokładnie ten przepływ, nad którym pracuję w mojej aplikacji, ale odpowiedź mówi o używaniu usługi Angular i nie jestem pewien, czy chciałbym to zrobić, z pewnością to wszystko może być obsługiwane przez Express, więc kod po stronie klienta nie musi wiedzieć o tokenie, tylko o błędach, które serwer API zwraca.

Więc podsumowanie przepływu Chyba muszę:

  • użytkownik przesyła dane logowania
  • powraca OAuth 2 Serwer dostępu żeton
  • Reklamowe jest zapisany gdzieś w Express włączył przez id rodzaju
  • Plik cookie jest generowany i wysyłany w odpowiedzi na klienta. Cookie może zawierać zakodowaną wartość tokena? A może identyfikator wartości tokena przechowywany w komponencie Express middleware?
  • Klient wysyła żądanie interfejsu API, które podnosi oprogramowanie pośrednie trasy ekspresowej.
  • Ekspresowa kontrola obecności pliku cookie i dekoduje wartość tokena, lub w jakiś sposób pobiera ze strony serwera mechanizmu pamięci masowej.
  • Reklamowe wartość jest następnie wykorzystywana jako nagłówek między jednoznacznej i ostatecznej końcowym api

Prawdopodobnie oprogramowania pośredniego już, że obecnie nie obsługuje tej kinda rzecz, ja już widziałem PassportJS który wydaje się być trochę rzeczą, jaką może chcę go użyć, ale nie jestem pewien, czy obsługuje on przepływ tokenu OAuth2 na serwerze, na którym pracuję (przyznanie hasła) i zamiast tego wydaje się bardziej odpowiedni do przepływu OAuth przekierowania logowania.

Z pewnością potrzebuję gdzieś zapisać wartość tokena w Expressie, więc w jakiejś formie pamięci (nie w pamięci, nie sądzę).

Jestem dość nowy w Express, więc doceniam wszelkie sugestie \ porady, jak się do tego podejść.

Dzięki

+0

Po otrzymaniu tokena z serwera Oauth2 można go zapisać po stronie użytkownika. Możesz użyć cookie lub localstorage HTML 5. – trquoccuong

+0

Dobrze, podejście cookie jest tym, co myślę, ale musiałoby zakodować wartość tokena z powrotem do klienta, a następnie to jest dekodowane za każdym razem dla kolejnych żądań Express do końcowy punkt końcowy. – mindparse

Odpowiedz

5

najbardziej bezpieczny sposób to zrobić to tak, jak opisano:

  • Uzyskaj token OAuth od jakiegoś usług obcych (Google, Facebook, cokolwiek).
  • Utwórz plik cookie za pomocą Express i zapisz go w pliku cookie. Upewnij się, że ustawiłeś również znaczniki plików cookie secure i httpOnly: dzięki temu ciasteczko NIE MOŻE ODCZYTAĆ po kodzie JavaScript po stronie klienta lub za pośrednictwem połączenia innego niż SSL.
  • Za każdym razem, gdy użytkownik wysyła żądanie do Twojej witryny, plik cookie może zostać odczytany przez oprogramowanie pośredniczące w Express i używany do wykonywania dowolnych wywołań API potrzebnych do usługi strony trzeciej.

Jeśli Twoja usługa również musi wysyłać asynchroniczne żądania do Google/Facebook/itp., Gdy użytkownik NIE aktywnie klika w witrynie, to również powinna przechowywać swój token w bazie danych użytkownika - sposób, w jaki możesz składać wnioski w imieniu użytkownika, kiedy tylko zajdzie taka potrzeba.

Jestem autorem express-stormpath, biblioteki autorów węzła (podobnej do Passport), i tak robimy tam rzeczy, aby zapewnić maksymalne bezpieczeństwo!