Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Napíšeš si vlastný session handler (viď funkcia session_set_save_handler), ktorý bude ukladať sessio…
los 22.09.2011 18:31
los
Ideálne by bolo podľa toho, čo píšeš v poslednej vete. Tak by to úplne stačilo. Ďakujem. To ma nanap… nový
msx. 22.09.2011 22:01
msx.
API si môžeš implementovať, aké len chceš. Ak by som si mal vybrať najjednoduchšie riešenie, tak by… nový
los 22.09.2011 22:56
los
Tak som začal hľadať niečo o OAuth. na PHP.net sa píše, že to vyžaduje to a to a prešiel som na down… nový
msx. 27.09.2011 15:42
msx.
Áno, potrebuješ to implementovať na oboch serveroch - jeden je klient (consumer) a druhý je server (… nový
los 27.09.2011 21:26
los
Trochu neskoro reagujem, lebo som doteraz riešil iné veci. Teraz sa opäť vraciam k tomuto. Ak ťa mô… nový
msx. 20.10.2011 20:19
msx.
Takže server A je ten, na ktorom je používateľ prihlásený. Používateľ chce prejsť na server B, ktorý… nový
los 20.10.2011 21:20
los
Tak skúsim to nejako tak implementovať. Zatiaľ neuzavriem, prípadné otázky budem smerovať do tejto t… nový
msx. 20.10.2011 22:54
msx.
Otázky nie sú nutné, funguje to. poslední
msx. 11.01.2012 18:49
msx.

Napíšeš si vlastný session handler (viď funkcia session_set_save_handler), ktorý bude ukladať session do úložiska, ku ktorému budú mať prístup oba servery.

Lepšie by bolo povedať, na čo konkrétne to potrebuješ. Ak vyslovene na zdieľanie celej session, tak riešením je ten session handler. Ak ale potrebuješ len zdieľať niektoré údaje bez toho, aby si ich prenášal v URL, tak ti stačí pri generovaní odkazu na druhý server vygenerovať nejaký token, pomocou ktorého sa aplikácia na druhom serveri dostane pomocou HTTP requestu k dátam na prvom serveri.

Ideálne by bolo podľa toho, čo píšeš v poslednej vete. Tak by to úplne stačilo. Ďakujem. To ma nanapadlo. Ešte by som sa chcel spýtať, ako potom odovzdávať informácie? Cez SOAP alebo je niečo jednoduchšie? Myslím v zmysle, aby sa k údajom nedostal používateľ stránky. Dalo by sa to v krátkosti popísať ako prihlasovanie cez inú doménu.

API si môžeš implementovať, aké len chceš. Ak by som si mal vybrať najjednoduchšie riešenie, tak by som si zvolil JSON, pomocou curl by som sťahoval obsah (alebo pomocou fsockopen, ak by nebol nainštalovaný curl).

Na prvom serveri by som ukladal do databázy niekde k používateľovi token, ktorého časová platnosť by bola obmedzená. Token by sa prenášal v URL adrese. Na druhom serveri by som podľa toho tokena vyhľadal používateľa a sprístupnil jeho dáta.

Ak by som si mal vybrať najsofistikovanejšie riešenie, tak by som si prečítal niečo o protokole OAuth, ale to je kanón na vrabce.

Edit: Ak nie sú tie dáta naviazané na používateľa, ale naozaj na session, tak ten token nebudeš ukladať k používateľovi, ale do nejakej ďalšej tabuľky, do ktorej uložíš aj tie dáta, ktoré potrebuješ poskytnúť.

Edit2: "Dalo by sa to v krátkosti popísať ako prihlasovanie cez inú doménu." => OAuth

Tak som začal hľadať niečo o OAuth. na PHP.net sa píše, že to vyžaduje to a to a prešiel som na download. Zrejme to treba nainštalovať k serveru. Teraz sa mi tu značí otázka, že ak to chcem používať na webe, musí mať OAuth podporu aj hosting na strane servera a aj klienta, ak tomu správne rozumiem (server ako úložisko dát o prihlásení a klient ako server, kde sa chcem prihlásiť).

Áno, potrebuješ to implementovať na oboch serveroch - jeden je klient (consumer) a druhý je server (service provider). Ak nechceš/nemôžeš doinštalovať rozšírenie, dajú sa nájsť aj iné implementácie, ktoré nevyžadujú inštaláciu rozšírenia na serveri.

Trochu neskoro reagujem, lebo som doteraz riešil iné veci. Teraz sa opäť vraciam k tomuto.

Ak ťa môžem poprosiť, keby si mi niečo odporučil, pretože inštaláciou balíčkov nemám toľko skúseností a myslím, že by sa našli aj jednoduchšie riešenia ako OAuth.

Ono v podstate najjednoduchšie je posielanie nejakej hashovanej požiadavky na server a jeho odpoveď, ktorá by bola tiež ošetrená nejakým hashom a v podstate by to stačilo, ale radšej by som použil niečo existujúce, kde sa nebudem musieť starať o riešenie všetkých bezpečnostných rizík. A predsa len kvôli použiteľnosti je vhodnejšie použiť už niečo existujúce.

Takže server A je ten, na ktorom je používateľ prihlásený. Používateľ chce prejsť na server B, ktorý má mať prístup k údajom na serveri A.

Postup:
1. Na serveri A vygeneruješ token (napr. pomocou funkcie uniqid) a uložíš ho do tabuľky niekde vedľa používateľa, resp. vedľa dát, ktoré potrebuješ sprístupniť.

2. Presmeruješ používateľa na server B, pričom do URL zahrnieš vygenerovaný token z prvého kroku.

3. Na serveri B pošleš požiadavku na server A s obdržaným tokenom (pomocou cURL alebo fsockopen). Server A vyhľadá podľa tokenu dáta a pošle ich v odpovedi (napr. v JSON formáte použitím json_encode).

To je všetko. Z pohľadu bezpečnosti by som do URL z druhého kroku dával aj identifikátor používateľa, aby sa ani náhodou nedostal niekto k dátam iného používateľa. Ďalej si môžeš niekde vedľa tokenu (alebo prípadne aj priamo v ňom) ukladať čas, dokedy je ten token platný. Dalo by sa to ešte vylepšovať, ale myslím, že takto je to good enough.

Zpět do poradny Odpovědět na původní otázku Nahoru