Specyfikacja OAuth 2 prowadzi mnie do przekonania, że "serwer zasobów" i "serwer autoryzacji" niekoniecznie muszą być tą samą aplikacją, ale staram się wymyślić, jak to jest faktycznie wdrażany w praktyce.OAuth 2: oddzielenie serwera zasobów i serwera autoryzacji
Jako przykład załóżmy, że istnieją następujące aplikacje:
- zasobów serwera
- serwer autoryzacji
- web frontend
- stronę trzecią app klient
Scenariusz nr 1: Logowanie do interfejsu WWW
- użytkownik przesyła formularz logowania
- Web App posty poświadczeń AUTH serwera (grant_type = hasło) i otrzymuje access_token
- sklepów Web App access_token w sesji
- po każdym kolejnym życzenie:
- GET zasobu (ów) z serwera zasobów (w/access_token w nagłówku Authorization) i uczynić go w interfejsie WWW
- jeśli otrzymujemy 401, a następnie zalogować się użytkownikowi (usunąć access_token z sesji)
Scenariusz nr 2: Autoryzacja aplikacji innych firm
- użytkownik zażąda autoryzacji z serwisu auth
- pozwalają/zaprzeczyć formularz jest wyświetlany
- użytkownik zostaje przekierowany z powrotem do aplikacji klienckiej z upoważnienia obecny kod
- aplikacja kliencka kodu POST do autoryzacji usługi (grant_type = kod autoryzacji) i otrzymuje kod dostępu
- klient otrzymuje środki z zasobów serwera mijania (w/Auth nagłówku)
Część mam kłopoty ze zrozumieniem jest jak do uwierzytelnienia użytkownika przed pokazując umożliwić/zaprzeczyć postać w scenariuszu 2 #. Użytkownik może być zalogowany do głównej aplikacji internetowej, ale usługa autoryzacji nie ma o tym pojęcia i powinna jakoś ponownie uwierzytelnić użytkownika. Czy usługa autoryzacji musi również obsługiwać logowanie/sesje?
Zastanawiam się, czy może to więcej sensu dla aplikacji internetowych, który jest odpowiedzialny za wykazujące umożliwić/zaprzeczyć formę z dwóch powodów:
- to zachowuje wszystkie UI w jednej aplikacji
- nie zmusi użytkownika, aby ponownie swoje poświadczenia, jeśli są one już zalogowany do aplikacji internetowej
Oto jeden z możliwych alternatyw dla scenariusza # 2:
- użytkownik zażąda autoryzacji z aplikacji internetowej
- pozwalają/zaprzeczyć formularz jest wyświetlany
- Web App postów do auth serwera tworząc nową dotację, kod autoryzacji jest zwracana
- aplikację internetową przekierowuje do aplikacji klienckiej z kodem autoryzacji niniejszego
- klient kod POST aplikacji do serwisu auth i otrzymuje access_token
Jaki jest najlepszy sposób, aby sobie z tym poradzić? Wszelkie ogólne uwagi, porady itp. Byłyby niesamowite!
Dzięki
Dzięki! To interesujące podejście. Nadal nie wiesz, czy warto dodać jeszcze większej złożoności. – scttnlsn
Tak, jest tam pytanie: jeśli masz wiele różnych aplikacji internetowych używających tego samego auth backendu (np. Google), prawdopodobnie potrzebujesz dedykowanego serwera autoryzacji z wszystkimi powiązanymi ekranami logowania na nim. Dla jednej aplikacji prawdopodobnie nie warta pracy. – Femi
Przydzielanie haseł powinno być używane tylko w aplikacjach posiadanych i kontrolowanych przez podmiot, który jest właścicielem usługi autoryzacji. W przeciwnym razie otwiera poważne luki w zabezpieczeniach. Użytkownik powinien podać swoje poświadczenia tylko aplikacji, która je wydała. – user2268788