Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Analiza logowania do portalu dobreprogramy.pl — uzyskujemy dostęp do zasobów użytkownika

Za nami już wpis odnośnie sposobu działania systemu powiadomień na portalu. Przed przystąpieniem do tworzenia kodu należy koniecznie przeanalizować jeszcze jeden, najważniejszy element tego zagadnienia - logowanie do portalu.

System powiadomień, opisany wcześniej, działa na podstawie zalogowanego użytkownika, czyli na podstawie ciasteczka przechowywanego w przeglądarce klienta.

Mieć ciastko i zjeść ciastko

Ponownie do pracy niezbędne będzie nam narzędzie deweloperskie, dostarczone wraz z przeglądarką. Zaczniemy od ciasteczka. Kiedy użytkownika podłączy się do aplikacji ASP.NET generowana jest sesja, która identyfikowana jest po unikalnym kluczu. Ów klucz zwracany jest dla użytkownika i przechowywany w ciasteczku w przeglądarce. Aplikacja ASP.NET wrzuca klucz w ciasteczko o nazwie: ASP.NET_SessionId.

Sesja tworzona jest już przy podłączeniu do aplikacji webowej, zatem już przed zalogowaniem otrzymujemy id sesji. Własne ciasteczko możemy podejrzeć w narzędziu deweloperskim, wchodząc na zakładkę Resources i klikając na Cookies -> www.dobreprogramy.pl:

Logowanie na dwa sposoby

Najciekawsze jest tutaj to, że portal posiada dwa, zupełnie różne sposoby na zalogowanie się. Do pierwszego dostaniemy się przez odrębny link, który pojawia się gdy zechcemy zalogować się z podstron (np. logowanie z poziomu bloga). Możemy do niej przejść także poprzez szybkie kliknięcie w przycisk logowanie na stronie głównej, zanim nie załadują się wszystkie skrypty na stronie. Drugi sposób pojawia się jako domyślna opcja logowanie, po pełnym pobraniu strony głównej.

Poniżej omówię dwie ścieżki, a na koniec opisze, który sposób będzie używany w naszej aplikacji do logowania i dlaczego. Zatem zacznijmy od:

Logowanie sposób nr 1 - dedykowana strona, klasyczny formularz

Głowna strona do logowania znajduje się pod adresem:

https://ssl.dobreprogramy.pl/Logowanie.html

Dostaniemy się do niej przez link. Jest to klasyczny formularz. Zatem wpisujemy swoje dane do logowania i załóżmy, że dodatkowo zaznaczamy opcję "W przyszłości zaloguj mnie automatycznie", dzięki niej będziemy zawsze zalogowani.

Załóżmy, że wpisaliśmy swoje dane i kliknęliśmy na przycisk logowania. Przejdźmy teraz na zakładkę Network, aby podejrzeć co się dzieje podczas logowania do portalu (warto zaznaczyć opcję Preserve log, aby przeglądarka nie czyściła logów przy przeładowaniu):

Jak na dłoni widzimy przesłany login i hasło oraz opcję automatycznego logowania. W zapytaniu zauważymy również ciasteczko, które otrzymaliśmy przy pierwszym wejściu na stronę, a także komplet danych charakterystycznych dla aplikacji ASP.NET (ViewState). Widzimy tutaj element EVENTTARGET, który informuję jaka kontrolka (ID) wywołuję akcję, w tym przypadku jest to link do logowania (lnkLogin).

Po zalogowaniu dostajemy inne (nowe) ciasteczko (ASP.NET_SessionId) niż te, którym się logowaliśmy.

Logowanie sposób nr 2 - dedykowany serwis, łatwiejsze wykorzystanie

Drugim sposobem na logowanie jest wyskakujące okienko. Od strony klienta funkcjonalnie nie różni się ono niczym od dedykowanej strony, prócz oczywiście tym, że nie przechodzimy na oddzielną podstronę, a po zalogowaniu strona sama się odświeży

Kolejny raz po odpaleniu narzędzi deweloperskich zaglądamy, jak wygląda mechanizm logowania. Tutaj sprawa jest znacznie prostsza. W tym miejscu system logowana korzysta z handlera ASP.NET znajdującego się pod adresem:

https://ssl.dobreprogramy.pl/Providers/LoginProvider.ashx

Widzimy, że w tym przypadku również przekazujemy oczywiście login, hasło, ciasteczko i opcję automatycznego logowania. Ważnym elementem wysyłanych danych jest parametr what, który określa akcję, w tym przypadku jest to logowanie (login).

Co ciekawe, ten sposób logowania nie zwraca nowego ciasteczka, jak miało to miejsce wcześniej. Po zalogowaniu zostajemy z tym samym ciasteczkiem (ASP.NET_SessionId), jakim się logowaliśmy.

Jak będziemy się logowali w tworzonej aplikacji W10 (+Mobile)?

Wybór jest oczywisty. Tworząc już w C# bardzo prosty proof of concept sprawdziłem, iż metoda druga jest znacznie prostsza do implementacji i wymaga mniej przesyłanych danych. Nie musimy przekazywać informacji, które trzeba byłoby wyłuskać z kodu HTML za pomocą dodatków, jak chociażby HtmlAgilityPack. Jest ona bardzo podobno do sposobu, w jaki zrobiony jest mechanizm do zarządzania powiadomieniami.

Logowanie opierać będzie się na następującym schemacie:

  1. Wysłanie z poziomu kodu zapytania do strony w celu pobrania ciasteczka z odpowiedzi (zapewne będzie klasyczna to strona do logowania, która niewiele waży)
  2. Wysłanie poprawnie stworzonego zapytania do handlera LoginProvider
  3. [Tu nastąpi logowanie na serwerze]
  4. Będziemy mogli już jako zalogowany użytkownik zarządzać powiadomienia z portalu poprzez handler NotifyHelper (do zapytania doklejone zostanie ciasteczko)
  5. Tadammm!! :P

Co dalej: czas na tworzenie kodu - logowanie

Jest to już ostatni wprowadzający wpis w serii, który przedstawia działanie podstawowych elementów portalu dobreprogramy.

W kolejnym poście rozpoczniemy już tworzenie aplikacji. Prócz bardzo podstawowego wprowadzenia do środowiska pracy i solucji będzie już konkretny kod, który powyższą analizę przeleje na C# i pozwoli na zalogowanie się do portalu z poziomu .NET. Oczywiście kod będzie wrzucany regularnie na GitHuba, zapewne trochę wcześniej niż będzie publikowany wpis.

Zapraszam zatem już teraz do kolejnych części serii.
 

windows programowanie urządzenia mobilne

Komentarze

0 nowych
mordzio   14 #1 12.03.2016 14:37

Widzę, że ostro zabrałeś się do pracy! Bardzo się z tego cieszę, ale przez Ciebie rozsypuje się nasz team! ;)

Shaki81 MODERATOR BLOGA  37 #2 12.03.2016 21:26

Czyli kod DP rozwalony do cna:) To teraz masz czas na stworzenie swojej aplikacji. Jak myślisz ile czasu potrzeba Ci na stworzenie kompletnego programy bo jestem coraz ciekawszy wyników.

stasinek   10 #3 12.03.2016 23:22

ciach, skasowane przez autora :)

Autor edytował komentarz w dniu: 28.11.2016 08:26
tylko_prawda   10 #4 13.03.2016 08:13

Pmoyślałeś, co będzie, jak będzie aktualizacja strony i zmienią cały system logowania? ;) W każdym razie życzę udanej aplikacji.

djfoxer   17 #5 13.03.2016 12:50

@mordzio: Jakoś wyłuskałem trochę czasu dla naszego dream team w CS:GO :)

@Shaki81: Na początek chcę zrobić prostą apkę, która działa w tle i pokazuje powiadomienia z portalu. Ten etap planuję zakończyć na początku kwietnia, ale to jeszcze nie do końca jest pewne bo mam maraton na w kwietniu. Zobaczymy :)

@stasinek: To tak jak piszesz, bezpieczeństwo przechowywanych danych po stronie serwera opiera się na naszej wierze do ludzi, którzy system stworzyli. Pamiętam, że jeszcze kilka lat temu spotykało się jeszcze serwisy, gdzie opcję "przypomnij hasło" (i wyślij na maila) można było często spotkać. Ostatnio właśnie rejestrowałem się na portalu jakimś, gdzie był konkurs i przy pierwszym logowaniu zobaczyłem wielgachny napis "kliknij, aby przypomnieć hasło" (i faktycznie wysyłali nasze hasło). Cóż...

@tylko_prawda: Nic na to nie poradzę, ale aż tak szybko ten moduł zapewne się nie zmieni :)

Lisek REDAKCJA  12 #6 15.03.2016 10:13

@stasinek napisał: "Pytanie w secie dodatkowym.. czy dobreprogramy hasują nasze hasła w bazie?"

Tak, jeżeli dobrze pamiętam, to chyba nawet od zawsze. Dlatego też nie można odzyskać hasła a jedynie zresetować.

Autor edytował komentarz.
Pablo_Wawa   9 #7 15.03.2016 20:31

@djfoxer: I znów Cię pochwalę - kolejny świetny opis, tym razem ładnie wyjaśniający metodykę rozpracowywania logowania do serwisu internetowego.
Zazwyczaj sesja jest trzymana w ciasteczku (czasami jak są one wyłączone - a jeśli serwis to wspiera - używa się przekazywanie zmiennej typu Session ID w adresie wywołania strony).
Inna częstotliwość pobierania powiadomień na portalu DP z zależności od aktywnej lub nie zakładki to sprawa rozwiązania po stronie portalu - Ty ustawisz tę częstotliwość po swojemu, jak uznasz za właściwe (konfigurowanie tego w ustawieniach apki?), bo nie ma to ze wspomnianą aktywnością związku.
A z tymi 2 drogami do logowania, to zauważyłem, że to jest jakoś dziwnie roziązane, bo jakiś czas było tak (czy jest tak nadal ostatnio jakoś nie sprawdzałem), że mogłem się zalogować naraz na portal i na forum, ale już wylogować z każdego z nich z osobna.
Także musisz się liczyć z tym, że za jakiś czas może się zmienić rozwiązanie logowania do portalu - ale nie przez złośliwość, tylko przy okazji zmian na portalu. Ale to nie problem - poprawisz to w swojej apce po prostu.

Autor edytował komentarz.
djfoxer   17 #8 17.03.2016 17:59

@Pablo_Wawa: Dziękuję ;) Z logowaniem chyba, aż tak źle nie powinno być. Nawet jeśli coś się zmieni, to raczej kwestią czasu będzie stworzenie nowego sposobu logowania. Szczególnie, że również ten klasyczny sposób logowania również miałem już zakodowany.