2012-06-11 10 views
5

Zastanawiam się, czy możliwe jest umieszczenie plików cookie pod inną domeną niż moją obecną nazwą domeny aplikacji?ciasteczka z krzyżową domeną Rails 3

Buduję aplikację, która ma dostęp do interfejsu API innej witryny. Jeśli użytkownik zalogował się już z drugiej strony, moja przeglądarka utworzy pliki cookie pod tą nazwą domeny. Na przykład użytkownik zalogowany w witrynie www.example.com, moja przeglądarka zapisuje pliki cookie: cookies['token'] w domenie www.example.com. Kiedy użytkownik odwiedza moją witrynę internetową www.mywebsite.com, w jaki sposób mogę uzyskać pliki cookie pod adresem www.example.com na moim serwerze rails?

Każda pomoc jest bardzo wdzięczna.

+2

Zasadniczo: Nie można. Celem ciasteczek posiadających domeny jest to, że przeglądarka wysyła tylko pliki cookie, które należą do bieżącej domeny. Mówiąc w inny sposób, jeśli znajdziesz sposób na odczytywanie plików cookie, które nie należą do Twojej domeny, znalazłeś exploit bezpieczeństwa. – Flambino

+0

Tak, od wielu dni googlowałem i znalazłem wiele odpowiedzi dokładnie tak samo jak ty. Wielkie dzięki za odpowiedź. –

Odpowiedz

4

Można to zrobić, ale wymaga, aby klient, witryna i inna strona internetowa współpracowały ze sobą. Masz klienta, który wie, jak uwierzytelnić się na stronie A. Chce zobaczyć stronę B jako użytkownik, który wie, jak uwierzytelnić się na stronie A z. Podstawowym sposobem osiągnięcia tego jest skontaktowanie się klienta z witryną A, uwierzytelnienie się, pobranie tokena z witryny A, której może zaufać strona B, a następnie przekazanie tego tokena na stronę B.

Skutecznie, chcesz zbudować bardzo specyficzny przypadek OpenID lub OAuth. Jest to z pewnością możliwe, ale będziesz musiał wprowadzić pewne zmiany w witrynie www.example.com, aby można było z niej korzystać. Jeśli jesteś w stanie to zrobić, świetnie.

Zacznij od przeczytania wszystkiego na temat protokołu OAuth. Nie musisz używać tego dokładnie (chociaż możesz), ale pomoże ci to wyjaśnić, co musisz zrobić: http://hueniverse.com/oauth/

+0

Aby to zrobić, czy muszę otworzyć obie witryny? lub link z witryny 1 do witryny 2? –

+0

Te ostatnie. Musisz skutecznie łączyć witryny. Wyobraź sobie, że strona A jest witryną taką jak LiveJournal, a strona B jest witryną, taką jak przepełnienie stosu. Możesz użyć swojego konta LiveJournal, aby zalogować się do Stack Overflow w podobny sposób, jak sugeruję, aby rozwiązać ten problem. Wyobraź sobie, że klikasz "Zaloguj się" na stronie B. Przekierowuje cię do strony A. Strona A weryfikuje Twój plik cookie, a następnie przekierowuje Cię do witryny B i zawiera podpisany parametr "autoryzuj tego użytkownika jako użytkownika X". Witryna B rozpoznaje to uwierzytelnienie i loguje Cię do witryny B. Działają razem. –

+0

Tak, mam to, co masz na myśli. To się nazywa 'OpenID', ale moim problemem jest to, że strona A nie zapewnia tego rodzaju usługi, ale ma własny ekran logowania. Kiedy użytkownik odwiedza witrynę A, przeglądarka utworzy pliki cookie, a kiedy użytkownik odwiedza witrynę B, chcę, aby strona B uzyskała dostęp do plików cookie na stronie A. Czy jest to możliwe? –

1

Możesz udostępniać pliki cookie w różnych poddomenach domeny, ale NIE możesz udostępniać plików cookie w wielu domenach .

Pliki cookie są zapisywane przez PRZEGLĄDARKI, a przeglądarka nie zezwala na dostęp do plików cookie z zewnętrznych nazw domen ani ich nie zapisuje. Byłaby to ogromna luka w zabezpieczeniach, gdyby przeglądarki pozwoliły ci to zrobić.

Można jednak udostępniać dane sesji przechowywane na serwerze między nazwami domen. To może nie być całkowicie banalne, ale ponieważ informacje o sesji są przechowywane na serwerze SERVER, w razie potrzeby można uzyskać dostęp do informacji na serwerze między aplikacjami. Jeśli dane sesji są przechowywane w bazie danych, wszystko, co jest wymagane, to zapewnienie dostępu do bazy danych obu domenom. W razie potrzeby można rzeczywiście otworzyć bazę danych na zewnętrzną nazwę domeny i mieć domenę zewnętrzną bezpośrednio połączyć się z bazą danych na serwerze.