Chcemy z kolegą zbudować trzy przykładowe aplikacje aby zrozumieć Oauth 2.0 workflow.
- sinatra oauth2 provider(server)
- rails app with angular.js on frontend auhenticated through 1 app
- 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.
- 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
- W backendzie używając tego kodu autoryzacji, sekretnego kodu i innych wymaganych parametrów wysyłamy żądanie do providera aby otrzymać access token.
- Używając otrzymanego access tokena wywołujemy na providerze akcje
/me
aby otrzymać zwrotkę, którą parsujemy zuid
,email
i innymi atrybutami użytkownika. - Następnie w tej akcji na podstawie
uid
który został przez as autoryzowany tworzymy lub wyszukujemy użytkownika. - 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.
- Następnie w tej akcji zakodować
uid
orazauthentication_token
jako JWToken i przekazać go do Satelizera - 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