Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Apache][inne]Crossdomain authorization
Forum PHP.pl > Forum > PHP
thek
Witam. Zastanawiam się nad problemem rozwiązania międzydomenowej autoryzacji użytkowników. Wiadomo, że sesje czy ciastka są związane z konkretna domeną. Co jednak jeśli obie mają tę sama strukturę, operują na tych samych danych, bazie (można powiedzieć, że jeden z serwisów jest funkcjonalnie częścią większego), ale są umieszczone w różnych domenach? Chodzi konkretnie o problem przejścia między nimi. Użytkownik zalogowany w jednym z serwisów powinien być automatycznie zalogowany na drugim przy przejściu, gdyż na obu ma to samo login i hasło. Tutaj pojawia się właśnie problem bezpieczeństwa. Wiadomo, że nie pchnę niczego przez GET bo to proszenie się o włam. Jak rozwiązać tego typu sytuację od strony kodu php? Trochę czytałem, ale pomysły wydają mi się mało bezpieczne. Nie będę bowiem przepychał loginu i hasła. Trochę zastanawiałem nad podsyłaniem do drugiego serwisu session_id zalogowanych użytkowników (a także zmianę w przypadku regeneracji oraz niszczenie tej danej przy logout) i ewentualne kombinowanie potem z modyfikacją adresu przy przejściu międzydomenowym, które by wychwytywało i porównywało dane. Coś na zasadzie mędzydomenowego odpytywania się o session_id. Ma ktoś jeszcze inne pomysły?

Ewentualnie kombinowanie z konfiguracją Apache lub wejściem w SSL rozważałem, ale dlatego pytam o możliwości rozwiązania problemu smile.gif
Sabistik
Multum opisów na sieci np: http://blog.webarchitect.pl/2008/01/12/prz...iedzy-domenami/
blim
Ja rozwiązuje, to tak:
- przejście z id sesji do drugiego serwisu 2
- odpalenie curlem sprawdzenia sesji w bazie serwisu 1 i ewentualne pobranie informacji info o użytkowniku
- jeżeli jest OK, to tworzymy nową sesję w serwisie 2 i w obu jesteśmy zalogowani.

W ten sposób użytkownik może się przemieszczać pomiędzy serwisami przy 1 logowaniu.
thek
Sabastic. Fajnie niby, ale zauważ jedną rzecz, która to rozwiązanie dyskwalifikuje. Jawne podanie session_id to jak proszenie się o przejęcie sesji. Tak można robić na domówkach, ale przy rozwiązaniach komercyjnych powinno się już bardziej zabezpieczać. Myślę o formie jakiegoś jednorazowgo tokena weryfikowanego przy przejściach, ale może ktoś ma jakieś inne pomysły smile.gif
Sabistik
W jaki sposób jawne? w jak trzymasz w ciachu czy url to nie jest jawne? Poza tym stosujesz walidacje przekazanego sidu.
matw
Ostatnio miałem podobny przypadek - ja bym to rozwiązał w sposób, żebym zrobić autoryzacje przez cross-domain ajax i w odpowiedzi przesłać jakiś token, który potem można przekazywać jako parametr.
Sephirus
Mam pewien pomysł, nieco inny ale może Ci coś nasunie.

Co powiesz na inne podejście.

Masz strony A,B i C. Logowanie na dowolnej z nich ma pozwolić (w bezpieczny sposócool.gif na to żeby user był zalogowany także na reszcie. Można byłoby wydzielić stronę X. Strona ta zajmowała by się jedynie logowaniem (scentralizowane logowanie). Wchodząc na dowolną stronę (przyjmijmy A) sprawdzane by było czy dany user jest zalogowany, jeśli nie to następowało by generowanie jakiegoś klucza i razem z nim następowało by przekierowanie do strony X gdzie user by się logował (o ile nie jest zalogowany). Po udanym logowaniu i przerobieniu klucza w odpowiedni sposób (szyfrowanie itp) następował by redirect z powrotem na stronę A wraz z kluczem, powodowalo by to sprawdzenie klucza i utworzenie sesji zalogowanego użytkownika. Po wejściu na stronę B mamy taki sam scenariusz tyle że użytkownik jest już zalogowany na X więc X odrazu odsyła przerobiony klucz, B robi sesję i wszystko działa.

Próbowałem to napisać czysto ideologicznie bo spotkałem sie z czymś podobnym ale nie chciałbym konkretnie na nic nakierowywać. Wydaje mi się jednak że ma to sporo plusow.

- centralny system logowania,
- bezpieczna wymiana informacji (klucze, szyfrowanie itd),
- dla zalogowanego użytkownika - szybkie działanie i wykrywanie stanu zalogowania,
- brak kombinowania z sesjami pomiędzy stronami a tworzenie ich dynamicznie w określonych przypadkach.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.