Oauth 2.0 workflow dla aplikacji sinatra + angular.js

Chcemy z kolegą zbudować trzy przykładowe aplikacje aby zrozumieć Oauth 2.0 workflow.

  1. sinatra oauth2 provider(server)
  2. rails app with angular.js on frontend auhenticated through 1 app
  3. sinatra on backend and angular.js on frontend auhenticated through 1 app

Nasza Rails/Sinatrowa aplikacja będzie autentykować użytkowników dzięki satelizer oraz napisanemu przez nas w sinatrze providerowi.

To jest to co obecnie zrozumieliśmy.

  1. Używając Satelizera otwieramy pop-up wprowadzamy login/haslo i dostajemy zwrotkę z kodem autoryzacji i przekazujemy go do backendu naszej aplikacji np. /oauth/authorize/callback
  2. W backendzie używając tego kodu autoryzacji, sekretnego kodu i innych wymaganych parametrów wysyłamy żądanie do providera aby otrzymać access token.
  3. Używając otrzymanego access tokena wywołujemy na providerze akcje /me aby otrzymać zwrotkę, którą parsujemy z uid, email i innymi atrybutami użytkownika.
  4. Następnie w tej akcji na podstawie uid który został przez as autoryzowany tworzymy lub wyszukujemy użytkownika.
  5. Zastanawiamy się co dalej. W jaki sposób powinniśmy ustawić authentication_token
  • zapisać access token jako authentication_token użytkownika którego autoryzowaliśmy w bazie danych. Dlaczego?
  • Wygenerować nowy authentication_token i np. zmieniać go przy każdym żadaniu(większe bezpieczeństwo, można o tym poczytać na stacku). Czy są inne powody poza bezpieczeństwem.
  1. Następnie w tej akcji zakodować uid oraz authentication_token jako JWToken i przekazać go do Satelizera
  2. Następnie przy każdym żądaniu Satelizer dodaje Bearer JWToken do nagłówka.
    Po otrzymaniu żądania nasz backend weryfikuje token z nagłówka z tym w bazie danych i w przypadku sukcesu authentykuje użytkownika np. (sign_in, store: false) w sinatrowej aplikacji wardena.

Co na ten temat myślicie, czy ten koncept jest prawidłowy?
Jest to nasze pierwsze podejści do Oauth2 i nie wiem czy coś nam nie umyka.

Dużo już na ten temat przeczytaliśmy w sieci niestety trochę nam to zamieszało.
Nie chodzi nam o narzędzia tylko zrozumienie całego procesu.

Dzięki i pozdrawiam po dłuższej przerwie na forum :slight_smile:

1 Like