MobileSecondHand – autentykacja po stronie serwera cz. 2.

Siemanko.

Dzisiaj druga część o autentykacji po stronie serwera. W części pierwszej napisałem, jak wygląda proces autentykacji za pomocą tokena, a dziś o tym jak i kiedy go generuje.

Przy tworzeniu nowej aplikacji webowej Asp.Net Core 1.0 z template’u w VS 2015 z automatu jest zaznaczona opcja indywidualnych kont użytkowników w sekcji autentykacji. Skutkuje to dodaniem do projektu paczki „Microsoft.AspNet.Identity.EntityFramework” (wraz z zależnościami), utworzeniem pierwszej migracji z tabelami związanymi z userami, oraz kontrolerów ze wstępnymi logikami do rejestracji, logowania i zarządzania kontem użytkownika. Żeby nie wywarzać otwartych drzwi oczywiście skorzystałem z tych dobrodziejstw w moim projekcie (po swojemu). Także przy tworzeniu oraz szukaniu usera w bazie korzystam z wbudowanych serwisów UserManager<T> oraz SignInManager<T>. Za pomocą ich metod mogę zapisać użytkownika do bazy, pobrać go, sprawdzić czy hasło jest prawidłowe itp.. Ogólnie sporo roboty do przodu.

Rejestracja i logowanie standardowe.

Rejestracja i logowanko sprowadza się do odebrania view modelu, wywołania odpowiednich metod z wcześniej wspomnianych serwisów i zwróceniu tokena.

1

2

3

Na ostatnim screenie jest metodka tworząca i zwracająca token. Odpowiedzialny za całe zamieszanie jest JwtSecurityTokenHandler z przestrzeni nazw System.IdentityModel.Tokens.Jwt.

Rejestracja i logowanie z facebookiem

Token autentykacji od fejsa pobieram w apce mobilnej i opisałem to w tym poście. Następnie token ten wysyłam na serwer gdzie napisałem sobie web clienta, który uderza do api facebooka w celu pobrania adresu emial potrzebnego do identity aplikacji serwerowej. Jednocześnie sprawdzana jest ważność facebook’owego tokenu. Cała klaska na dzień dzisiejszy wygląda tak:

4

Odpowiedzią api facebook’a jest oczywiście Json’ik. Parsuje go na swój obiekt odpowiedzi za pomocą JavaSrciptSerializer  z assembly System.Web.Exensions (bardzo fajna sprawa, rozwiązał mi problem błędnego parsowania tablicy byte’ów po stronie aplikacji mobilnej o czym w następnym poście). Swój obiekt odpowiedzi puszczam dalej i dzieje się to samo co na wcześniejszych screenach.

Pobieranie UserId z tokena

Po wpuszczeniu użytkownika do kontrolera przez JtwBearerTokenMiddleware wyciągam id usera z obiektu Identity  dostępnego przez wpisane User.Identity w kontrolerze. Do tej operacji napisałem serwisik zwracający mi id usera.

5

Podsumowanie

Autentykacja na takim poziomie jakim jest teraz w zupełności mi wystarcza aby w jak najmniejszym stopniu obciążać usera podawaniem swoich danych podczas korzystania z apki. W następnym poście wracamy do części androidowej i pobawimy się trochę z ogłoszeniami, czyli przeznaczeniem całego projektu :).

Pjona!,

Kilka słów o backendzie w ASP.NET Core 1.0

Siemanko.

Jest środa więc wedle harmonogramu, który ustaliłem we wcześniejszym poście ląduje na blogu jeszcze ciepły pościk. Dziś trochę o projekcie backendu dla aplikacji mobilnej. Dlaczego nowa wersja ASP.NET Core 1.0? Dla drugiego słowa z poprzedniego zdania – nowa 🙂 Mamy w tej chwili oficjalnie wersje RC1 (tutaj), a chyba nieoficjalnie pierwsze przymiarki do RC2 (jak się dowiedziałem szukając informacji na temat buga w JWT Bearer middleware – o czym przy okazji opisywania autentykacji – issue). Z nowym ASP.NET mam do czynienia od beta8.

Struktura projektu ASP.NET

Jak widać na załączonym obrazku zrobiłem sobie 6 projektów co by mieć porządeczek 😉

solution

Pierwszy projekt MobileSecondHand jest projektem startowym i jest to WebApplication utworzona z template’a w Visualu. Pozostałe projekty to webowe Class Library – package. I tu pierwsza z wielu nowości – library to paczki, które możesz opublikować na nugecie i instalować je jak inne biblioteki z nugeta. Te dodane do projektu poprzez File->New->Project dodaje się normalnie do Reference, ale muszą to być te „nowe” webowe Class Library (package). Jeśli masz napisane zajebiste ficzery, które wykorzystujesz w wielu różnych projektach – ale masz je napisane w „starym” Class Library – to nadal możesz wykorzystywać te zajebisty ficzery, ale w aplikacjach, w poprzedniej wersji frameworka 😉 Nie da się ich dodać do referencji projektu w nowej wersji frameworka. Trzeba „stare” przepisać na „nowe” Class Library (package).

packages

Jak widać wyżej projekty, do których dodałem referencje w projekcie startowym widnieją na liście dependencies w pliku project.json projektu startowego. Tu są wszystkie „paczki”. Możemy nie używać Package Manager Console czy Manage Nuget Packages tylko od razu wpisać na tej liście paczki, które chcemy dołączyć do projektu i zapisać plik, a wszystko stanie się samo 😉

Kolejną nowością jest klasa Startup.cs gdzie odbywa się cała konfiguracja i start aplikacji. Nie trzeba robić wpisów konfiguracyjnych w web.config czy global.asax – tego drugiego już nie ma. Całą konfigurację (np. CORS, MVC, routing, sposób autentykacji, dostęp do danych itp.) przeprowadzamy w Startup. NIe będą jej tu wklejał bo na jednym screenie się nie zmieści także jak masz ochotę to luknij do repo.

Kolejnym super ficzerem są kontrolery – WebApi czy zwykły dziedziczą po klasie Controller.cs i jeśli chcemy to możemy opędzić w jednym kontrolerze REST API oraz MVC do zwracania widoków oczywiście nadając metodom specjalne RouteAttribute’y.

Najlepszym ficzerem wg mnie jest wbudowany kontener IoC. Na pewno jest on kiepściejszy niż inne zewnętrzne istniejące od dawna, ale mam to w dupie bo mi w zupełności wystarcza, a nie muszę nic konfigurować poza zarejestrowaniem interfesju co sprowadza się do 1 (słownie: jednej) linijki i dzieje się to właśnie we wcześniej wspomnianej klasie Startup.cs 🙂

service

Mamy do wybory trzy opcje:

  • AddTransient – instancja na każde wystąpienie interfejsu
  • AddScoped – instancja na web request
  • AddSingleton – instancja w ramach całej aplikacji

i mnie to pasuje 🙂

Dobra, może wyglądać na to, że się wymądrzam, ale przytoczyłem kilka nowości, które zdążyłem poznać, ale jest jeszcze wiele do nauczenia się dlatego też właśnie backend robię w ASP.NET Core 1.0, o którym Gutek powiedział na DotNetConf, że póki nie wyjdzie pierwsza stabilna wersja to nowe ASP.NET jest jedynie do zabawy 🙂

Jeśli zajrzysz do repo to zobaczysz w głównym projekcie kilka rzeczy (kontrolery z zakomentowanym kodem, serwisy bez implementacji) z defaultowej aplikacji tworzonej przez visual. Na razie ich nie wyrzucam bo być może wykorzystam je w późniejszym etapie więc po co wymyślać koło na nowo 🙂

 

Dzisiejszym postem kończę wstęp do mojego projektu. Od niedzieli jedziemy już na grubo i będziecie mogli poczytać oraz zobaczyć co i jak jest zrobione do tej pory,a jest kilka rzeczy 😉

Pjona!

 

Start #dajsiepoznac 2016 – opis projektu „Mobile Second Hand”.

Siemanko.

Dziś wystartował konkurs #dajsiepoznac także pora na kilka słów o tym co zamierzam robić przez najbliższy czas. Mam nadzieję, że uda mi się wygospodarować wolnego czasu na tyle aby mieć o czym pisać dwa razy w tygodniu do połowy maja.

Projekt ma na celu stworzenie aplikacji mobilnej, która ma służyć do kojarzenia ze sobą użytkowników w zadanym przez nich obszarze w celu pozbycia się/nabycia w maksymalnie uproszczony sposób starych/niepotrzebnych/nietrafionych z kolorem, rozmiarem itp. ubrań czyt. odzieży. Aplikacja będzie skierowana głównie do kobiet, które uwielbiają kupować lub zdobywać nowe (w ich garderobie) ciuchy jednocześnie nie mając co zrobić z rzeczami, które się Im już znudziły. Oczywiście jest mnóstwo platform do sprzedania takich niepotrzebnych rzeczy jednak wiąże się to najczęściej z :

(dla chcącej się pozbyć)

  • rejestracją
  • wypełnianiem dość sporych formularzy z wymaganymi polami
  • robieniem zdjęć, które najczęściej następnie należy zgrać na kompa
  • używane rzeczy nie cieszą się zbyt dużym powodzeniem (najczęściej kupują je kobiety mające fioła na punkcie second handów)
  • przy ew. sprzedaży trzeba zapakować przesyłkę
  • udać się na pocztę lub umówić z kurierem (trzeba znaleźć czas najczęściej w godzinach pracy)
  • czekać na zwrot pobrania
  • ogólnie sporo roboty i zachodu

(dla chcącej coś kupić)

  • rejestracją
  • śledzeniem aukcji/ogłoszeń
  • wysyłaniem zapytań do sprzedającego, na których odpowiedź trzeba czekać
  • brak pewności czy to co na zdjęciu wydaje się być ok w realu też jest ok
  • brak możliwości przymierzenia
  • oczekiwaniem na przesyłkę

 

A gdyby tak:

(dla chcącej się pozbyć)

wyciągnąć telefon, zrobić zdjęcie np. sukienki, której chcemy się pozbyć, wpisać np. „Sukienka czerwona rozm. 38 raz użyta. Sprzedam lub zamienię na inną” i kliknąć OK. Po pewnym czasie dostajemy powiadomienie, że użytkowniczka XYZ jest zainteresowana i chce nawiązać kontakt. Klikamy ok i otwiera nam się mini czat. Użytkowniczka oznajmia, że znajduje się od sprzedającej 2km więc za 15 min. mogą się umówić na mieście. Tak też się dzieje i dokonują transakcji. Obie użytkowniczki są zadowolone 🙂

(dla chcącej coś kupić)

idziemy ulicą i dostajemy powiadomienie, że w odległości ok 2 km jest do kupienia jakiś ciuch. Otwieramy ogłoszenie, oglądamy zdjęcia i klikamy nawiąż kontakt. Otwiera nam się okno mini czatu prosimy sprzedającego o nr telefonu i uzgadniamy miejsce gdzie możemy obejrzeć ciuch i ew. dokonać transakcji. Obie użytkowniczki są zadowolone 🙂

 

Teraz trochę o technologiach:

Java_logo

android

 

Jak widać po logach apka jest pisana na androida w Android Studio. Jestem całkowicie zielony jeśli chodzi o Javę i w ogóle development mobilny no ale to jest główny powód tego projektu – chcę się czegoś nowego nauczyć 🙂 Apka będzie korzystać, z internetu, lokalizacji i multimediów.

aspnetcore

Backendem jest nowe ASP.NET Core czyli jeszcze do niedawna nowe ASP.NET5. REST API, dostęp do danych i cała logika. Tu już czuję się znacznie mocniej ponieważ jestem .NETowcem, ale oczywiście też mam zamiar wielu nowych rzeczy w nowym frameworku się nauczyć.

maxresdefault

Jak starczy czasu to chciałbym też nieco liznąć tematu Machine Learning. W tym tez jestem zielony ale mam nadzieję, że się to zmieni. A czego maszyna miałaby się w tym projekcie uczyć? Jakie ciuchy, jakie kolory i rozmiary itp. najczęściej i najchętniej dany użytkownik przegląda, i na tej podstawie wyświetlać mu spersonalizowane reklamy.

 

To by było na tyle jeśli chodzi o wstęp. W następnych postach będę pisał co i jak zrobiłem oraz jaki będzie dalszy plan zadań.

Jak dotąd zrobiłem kilka bardzo prostych widoków w androidzie na potrzeby logowania i autentykacji, wysyłanie/odbieranie requestow oraz proces autentykacji w ASP.NET obsługujący logowanie przez facebook’a.

Pjona!