2013-06-05 8 views
8

Jestem nieco zdezorientowany, jak poprawnie i bezpiecznie uwierzytelniać użytkowników za pomocą mojego REST API oraz zapewnić i opcję uwierzytelniania za pomocą innych dostawców OAuth 2.0 (np. Facebook, Google itp.).Uwierzytelnianie użytkownika za pośrednictwem mojego REST API i Facebooka

Scenariusz

użytkownicy korzystają z aplikacji internetowych, które powinny spożywać mego odpoczynku API. Użytkownicy powinni mieć możliwość logowania i wykonywania operacji CRUD zarówno przy użyciu nazwy użytkownika/hasła, jak i przy użyciu usług innych dostawców, takich jak Facebook. Będę używał SSL do szyfrowania ruchu na stronie internetowej i API.

Nie biorąc pod uwagę usług obcych stron trzecich i studiując różne pytania już zadane tutaj na SO, myślałem o obsłudze uwierzytelniania użytkownika, jak na zdjęciu.

Technologie i aktualny pomysł

REST API jest napisane przy użyciu JS używając NodeJS i Express. WebApp zapewniona przez inną instancję NodeJS to głównie AngularJS z szablonami, które zużywają interfejs API REST.

Mój obecny pomysł to pozwolić WebApp obsługiwać sekwencji logowania i pozwolić Facebook zapisać swój token w moim DB za pomocą wywołania zwrotnego. Ale to rozwiązanie powoduje zbyt wiele obejścia problemu!

Pytania

  1. jest sekwencją uwierzytelniania przedstawiona na obrazie jest prawidłowy?
  2. W jaki sposób powyższa sekwencja uwierzytelniania jest porównywana z przepływem poświadczeń hasła właściciela zasobu w OAuth2.0? Czy warto zamiast tego używać OAuth2.0?
  3. Jak mogę zintegrować logowanie przez strony trzecie (np. Facebook)? Wszelkie sugestie lub (lepszy) przykład?

Referencje

passport.js RESTful auth

Login with facebook and using oauth 2.0 for authentication of REST api calls

i wiele innych tutaj na SO :)

Odpowiedz

0

Moje 2 centów ..

  1. Proces wygląda dobrze dla mnie. Chciałbym ponownie wystawić token przy każdym logowaniu, a także przechowywać go w bazie danych, dzięki czemu tokeny mogą być łatwo odwołane.

Użyj PassportJS. Ma wsparcie dla przepływów OAuth i obsługuje wiele zewnętrznych integracji, takich jak FB, Twitter, Github itp .. i od jego middleware middleware .. jego integracja będzie bardzo napięta w aplikacji ..