Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dane niejawne, zapytanie do innej domeny, uwierzytelnianie
Forum PHP.pl > Forum > XML, AJAX
pp-layouts
Temat już kiedyś poruszałem, tym razem problem jest bardziej złożony. Mam aplikację internetową z logowaniem usera. Bardzo dobrze zabezpieczoną od strony backendu, uprawnienia usera siedzą w sesji. Dopóki backend i frontend były częścią tego samego serwisu (ta sama domena), sprawa była prosta - serwer zwracał dane tylko na żądania z tej samej sesji. Napisałem jednak usługę danych, która miała być wspólna dla kilku serwisów. Zwraca JSON lub XML, w zależności od żądania klienta. Problem z tym, że nie chcę zwracać danych każdemu kto zapyta, a tylko konkretnym aplikacjom i tylko wtedy, kiedy user jest zalogowany.

Obecnie mam to rozwiązane tak - PHP wysyła zapytanie z uwierzytelnieniem do serwera usługi danych, następnie zwraca pobrane dane AJAX-owi wewnątrz domeny aplikacji klienckiej. Działa i jest bezpieczne, tylko wydaje mi się to trochę na około. Chciałbym pominąć jakoś ten krok pobierania danych przez PHP aplikacji klienckiej, zamiast tego pobrać dane bezpośrednio JS z serwera usługi danych. Tylko problem uwierzytelnienia! Nie mogę hasła umieścić w kodzie przecież. To musi być proste... Jednym z pomysłów jest, żeby skrypt pobierał dane do uwierzytelnienia z serwera klienckiego (w sesji) następnie wysyłał tak uzyskane uwierzytelnienie do usługi danych. Tak czy inaczej mam 2 zapytania. Chociaż w sumie to pierwsze można wywołać raz, dane mogą siedzieć w pamięci do czasu przeładowania strony (co w AJAX-ie powinno być rzadkością).

Dobra, ja tu kombinuję jak koń pod górę, a może jest jakiś standardowy sposób uwierzytelniania dla zapytań do innej domeny? W szczególności interesują mnie rozwiązania z jQuery.
Rid
Można by tutaj spróbować SilverLight'a,w przeciwieństwie do Ajaxa można tworzyć osobne zintegrowane aplikacje.I druga rzecz, silverlighta nie da rady ominąć wyłączając obsługe js.W połaczeniu z WCF daje naprawdę imponujące efekty.
pp-layouts
Gdyby klient wybulił z 10 - 20k za ten pomysł, pewnie bym tak zrobił. Problem w tym, że aplikacja (wielka krowa) już jest, w dodatku działa. Jedyne co chcę uzyskać to zmniejszyć obciążenie serwera i przyśpieszyć działanie. Aktualnie serwer aplikacji działa jako proxy dla usługi danych. W sposób niedostępny userowi przesyła uwierzytelnienie do usługi, odbiera dane i wysyła dane do frontendu.

Przy okazji wydania jQuery 1.51 i jego nowego modułu AJAXa odświeżyłem sobie wiedzę (i zacząłem odpalać $.ajax "z ręki", zamiast via framework, co było nudne i zostawiało za małą swobodę). Moją uwagę przykuła technika jsonp - z pomocą której można zasysać dane z innych domen, co aż się prosi do wykorzystania z moją usługą danych. Sęk w tym, że chyba brakuje tam skutecznego mechanizmu uwierzytelniania. Chyba że jest, a ja o nim nie wiem smile.gif

Póki co, chyba jednak zostanę przy tym proxy - generuje minimalny narzut, może to po prostu moje paranoiczne nawyki z programowania C64 wpuściły mnie w kanał tego tematu smile.gif Może narzut proksiaka jest faktycznie pomijalnie mały.
darko
Może tutaj coś znajdziesz?
pp-layouts
"...but finally gave up..." smile.gif

Tak, straciłem 2 godziny tylko na to, żeby się przekonać, że tak się nie da. W tej chwili rozszerzam usługę danych o dodatkowe wyjście HTML i TEXT (oryginalnie przewidziałem tylko JSON, XML i WDDX, tylko że klient zażyczył sobie, żeby w katalogu z usługą poza kodem i danymi siedział jeszcze formularz, dla którego usługa zwraca dane - więc pomyślałem sobie, że też go prześlę tą samą drogą).

Przy okazji, ciekawostka - aplikacja używa krowiastego formularza (ok 1000 linii HTML), przez co ładowanie strony przy wolnym łączu jest wyjątkowo zamulające. Jak drania pchnę AJAX-em, to aplikacja zrobi przyjemniejsze wrażenie, bo layout wyskoczy od razu, pokaże się kręciołek - user odniesie wrażenie że nie jest olany, bo coś się dzieje smile.gif

Taki mały paradoks: każdy zawodowiec stara się oddzielić prezentację od danych. To podstawa. Formularz to zwykle warstwa prezentacji, ale mam właśnie na tapecie ten specyficzny wyjątek, gdzie sam formularz jest też częścią danych. Aplikacja wykonuje obliczenia dla danych klienta, z tym, że zestaw danych które ma wprowadzić klient nie jest zdeterminowany, zależy od tego, co i z czego w danej chwili usługa potrafi obliczyć. Głównym założeniem projektowym jest całkowita rozłączność pomiędzy usługą danych a aplikacją.
darko
No niestety tak już jest czasami z programowaniem usług sieciowych.
pp-layouts
Właśnie skończyłem implementacje mojego cuda w praktyce. Co ciekawe, aplikacja ładuje się szybciej przy pobieraniu części via AJAX niż przy pobraniu całego HTML-a z serwera. IE7 poprzednio wyrzucał błąd, że strona długo nie kończy ładowania (ale dało się go zignorować). Tym razem IE7 idzie jak przecinak, największy przyrost prędkości jest na nim.

Wniosek: bardziej opłaca się dogrywać większe ilości danych do aplikacji niż wysyłać je w początkowym HTML-u. Dla lepszych przeglądarek różnica jest niewielka, dla starych IE - kolosalna.

Dodatkowy bonus: preloader wyświetlający status uruchamiania smile.gif
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.