Dwie aplikacjie, jedna domena, SSO |
Dwie aplikacjie, jedna domena, SSO |
28.06.2022, 12:35:50
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 25.06.2022 Ostrzeżenie: (0%) |
Posiadam dwie aplikacje w obrębie jednej domeny. Zrobiłem SSO tak aby z poziomu jednej aplikacji możliwe było logowanie do drugiej.
W pierwszej aplikacji zrobiłem token, który zawiera również nazwę użytkownika.
W drugiej aplikacji dekoduje token i jeżeli występuje dany użytkownik i występuje plik token.txt to pomijam hasło i wpuszczam do drugiego systemu. Po wylogowaniu z jednego z systemów token jest kasowany. Niestety zauważyłem pierwszy błąd tzn. jeżeli zaloguje się na innej przeglądarce to wtedy utworzy się token.txt więc inna osoba z innej przeglądarki może wywołać bezpośrednio drugą aplikacje i bez logowania wejdzie bo spełniło wszystkie warunki. Czy ktoś ma jakiś pomysł aby zrobić np. token unikalny, może jakiś unikalny sessions_id bądź cookies. Trochę utknąłem i nie wiem co dalej Chyba znalazłem rozwiązanie mojego problemu. Dołożyłem który następnie jest wysyłany za pomocą Ten post edytował aldtest 27.06.2022, 20:22:18 |
|
|
28.06.2022, 12:58:57
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Czyli zrobiłeś po prostu sesję (session_start właśnie to robi przy odpowiedniej konfiguracji). Każdy kto zgarnie to cookie będzie mógł się zalogować bez danych. Nie możesz wprowadzić oauth?
-------------------- |
|
|
28.06.2022, 14:42:05
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 25.06.2022 Ostrzeżenie: (0%) |
Zrobiłem tak aby nikt nie mógł wprowadzić id sesji. Dodatkowo zamknąłem to w obrębie adresu IP.
Ten post edytował aldtest 28.06.2022, 14:43:15 |
|
|
29.06.2022, 06:39:39
Post
#4
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Nie do końca tak. Każde wywołanie aplikacji podrzędnej powinno trafić do aplikacji głównej (logującej) ze swoim adresem. Dopiero aplikacja logująca decyduje co dalej, sprawdza, czy dany użytkownik jest zalogowany, czy ma prawa do aplikacji, ustala klucz (pary kluczy, token), zakodowanego user-a i odsyła to wszystko do aplikacji podrzędnej. Jakakolwiek zmiana stanu user-a w aplikacji głównej (upłynięcie czasu sesji, wylogowanie, próba Session Fixation) ma skutkować odpowiednimi działaniami w aplikacji podrzędnej. Bez żadnych cookies. Tyle w bardzo krótkiej formie.
@viking podał bezpieczne rozwiązanie. |
|
|
29.06.2022, 14:28:30
Post
#5
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 25.06.2022 Ostrzeżenie: (0%) |
Taki warunek również jest zrobiony. W momencie wylogowania z aplikacji A token jest kasowany oraz zmienia się id sesji. W aplikacji B jest ustawiony warunek jeżeli brakuje pliku z tokenem oraz id sesji się zmieni następuje również wylogowanie z aplikacji B. Każdorazowe wywołanie aplikacji B sprawdza czy jest plik z tokenem oraz czy id sessji jest równy $_COOKIE['token'] w innym wypadku jest logout. Tak jak wspomniałem dodatkowo zamknąłem to wszystko w obrębie adresu IP.
Jasne wiem że mogę to zrobić za pomocą oauth natomiast chce się trochę pobawić sesją i cookies dlatego tak kombinuje. Może trochę jak koń pod górę ale chce mieć pewność że to co zrobiłem ma sens i jest bezpieczne albo ma to poważne luki i nie ma co się w dalej bawić. Ten post edytował aldtest 29.06.2022, 14:35:47 |
|
|
30.06.2022, 06:56:03
Post
#6
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Tego nie robi się na plikach tekstowych z tokenem, przynajmniej ja takich systemów nie znam (nie używam). Wygenerowane tokeny w części aplikacji służącej do autoryzacji użytkownika można zapisać do bazy łącznie z UUID usera i w sesji. Można porównywać wtedy klucze na bieżąco. W plikach tekstowych zawsze istnieje niebezpieczeństwo podejrzenia takiego pliku. W większych systemach używa się nawet dedykowanych maszyn (serwerów autoryzacji) tak jak na przykład u mnie w firmie.
|
|
|
30.06.2022, 14:26:54
Post
#7
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 25.06.2022 Ostrzeżenie: (0%) |
Dzięki za wszystkie sugestie. Wycofałem się z generowania wartości do pliku oraz cookies. Poszedłem po najniższej lini oporu tzn. skoro dwie aplikacje są na tej samej domenie to w aplikacji A zrobiłem tak:
W aplikacji B sprawdzam czy istnieje $_SESSION['data_sso'] i do działa zdecydowanie lepiej niż to co zrobiłem wcześniej. Dodatko zamknąłem to wszystko w obrębie danej puli adresów IP więc wydaje mi się że to powinno wystarczyć.
Ten post edytował aldtest 30.06.2022, 15:08:30 |
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 04:03 |