Wprowadzenie

Trudno wyobrazić sobie w dzisiejszych czasach logowanie do istniejącej aplikacji bez możliwości użycia takich sewisów jak Facebook, Twitter czy Google. W tym artykule skupie się na uwierzytelnianiu za pomocą pierwszego z nich.

Jako, że cała platforma ASP.NET Core ewoluuje, warto mieć na uwadzę, że artykuł został przygotowany w oparciu o wersję 2.0.

Tworzenie aplikacji

  • Otwieramy Visual Studio -> Tworzymy nowy projekt;
  • Typ projektu to .NET Core a rodzaj ASP.NET Core Web Application;
  • Zmieniamy domyślną nazwę, np. FacebookAuthentication: Tworzenie nowego projektu
  • Kolejny ekran to dokładna definicja naszego projektu. Decydujemy się na ASP.NET Core 2.0 MVC WebApplication: Projekt ASP.NET Core 2.0 MVC

Aplikacja została utworzona a my jesteśmy gotowi na dalsze kroki. Niestety nie do końca jest to prawda. Gdzie będziemy przechowywać dane użytkowników, którzy zalogowali się do naszej aplikacji za pomocą zewnętrznych serwisów? Z pomocą przychodzi nam ASP.NET Core Identity. Pozwala nam na przechowywanie danych użytkowników (w tym haseł) w dowolnie przygotowanej przez nas bazie danych. W momencie tworzenia aplikacji został utworzony domyślny kontekst: ApplicationDbContext, który teraz zaktualizujemy przy pomocy pewnego polecenia. Polecenie to dokona aktualizacji bazy danych zgodnie z podejściem Entity Framework Code First Migrations: Package Manager Console Konsolę otwieramy przechodząc przez: Tools -> NuGet Package Manager -> Package Manager Console. W pliczku appsettings.json możecie znaleźć ConnectionString dzięki któremu będziecie w stanie połączyć się do bazy danych i podejrzeć utworzone tabele. W tym momencie jesteśmy gotowi do zbudowana naszej aplikacji i sprawdzenia czy wszystko uruchamia się poprawnie.

Tworzenie aplikacji Facebook

W pierwszym kroku musimy udać się pod poniższy adres Facebook dla Programistów i utworzyć konto. Konto tworzymy za pomocą logowania przez swój osobisty profil (jeżeli go nie posiadamy będziemy zmuszeni takie konto założyć). Po zalogowaniu jesteśmy przekierowani na poniższy panel: Facebook For Developers

W Waszym przypadku ekran ten może wygladać nieco inaczej – nie utworzyliście jeszcze żadnej aplikacji – zostaniecie przekierowani do niezywkle prostego ekranu z możliwością utworzenia nowej aplikacji.

Klikamy we wspomniany powyżej przycisk a naszym oczom ukazuje się ekran konfiguracji pierwszej aplikacji: Tworzenie nowej aplikacji facebook Nadajemy nazwę aplikacji (nie zawierającej w sobie słowa kluczowego face: Tworzenie nowej aplikacji facebook ze słowem kluczowym Adres e-mail powinien zostać wpisany domyślnie. W kolejnym kroku kilkamy przycisk Create App ID. Jeżeli wszystko przebiegnie pomyślnie zostaniecie przekierowani do panelu zarządzania. Na poniższym zrzucie ekranu możecie zobaczyć różne typy produktów, które możecie dodać do swojej aplikacji: Dashboard Nas interesuje logowanie za pomocą Facebook’a oraz webowy typ aplikacji: Web Application Przed nami pojawi się krótki poradnik przygotowany w 5-ciu krokach. Warto się z nim zapoznać a jako adres startowy podać adres na którym uruchamia się nasza lokalna aplikacja. W moim przypadku jest to: http://localhost:18324/

Przechodzimy do sekcji konfiguracyjnej naszego projektu: Ustawienia W tym miejscu mamy dostęp do ustawień OAuth. Musimy zdefiniować prawidłowe URL przekierowania uwierzytelniania. W tym celu do naszego adresu dodajemy następujący ciąg znaków: /signin-facebook Facebook App OAuth

Przechodzimy teraz do najważniejszej, z naszej perspektywy, sekcji: Settings -> Basic. Obie wartości App ID oraz App Secret będą nam potrzebne do poprawnej konfiguracji naszej aplikacji. W kolejnych krokach będziemy je kopiować do naszej aplikacji dlatego warto zostawić ten ekran otwarty. Ustawienia podstawowe

Konfiguracja aplikacji webowej

W naszej aplikacji musimy przechowywać wartości pól App ID oraz App Secret. Do tego celu użyjemy narzędzia Secret Manager. Pozwala nam na przechowywanie istotnych danych jak hasła czy klucze w trakcie przygotowywania naszej aplikacji w .NET Core. Przy użyciu tego narzędzia jesteśmy również w stanie dzielić te dane pomiędzy różne nasze projekty.

Klikamy prawym przyciskiem myszy na nasz projekt a następnie z listy wybieramy: Manage User Secrets Zostanie otwarty plik secret.json a my przygotowujemy go w poniższy sposób:

{
  "Authentication:Facebook:AppId": "AppId - tutaj wklejamy zawartość",
  "Authentication:Facebook:AppSecret": "AppSecret - tutaj wklejamy zawartość"
}  
Następnie otwieramy Startup.cs i w metodzie ConfigureServices dodajemy poniższy kod:
services.AddAuthentication().AddFacebook(facebookOptions =>
{
	facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
	facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
});
Poniższy kod pozwala nam na zczytanie App ID oraz App Secret w celu przeprowadzenia uwierzytelniania.

I to już wszystko, nasza aplikacja jest gotowa do uruchomienia i przeprowadzania procesu logowania: Sekcja logowania W sekcji logowania możecie zobaczyć dodatkowy przycisk: Facebook. Po kliknięciu zostaniecie przekierowani do ekranu logowania a efektem wpisania poprawnych danych jest poniższa informacja: Rejestracja przez serwis Facebook Po kliknięciu przycisku rejestracji nasze konto w serwisie zostało utworzone a my zostaniemy przekierowaniu do ekranu głównego w raz z informacją, że zostaliśmy poprawnie zalogowani: Poprawne utworzenie konta

Podsumowanie

Z powodzeniem skonfigurowaliśmy i utworzyliśmy aplikację, która pozwala na uwierzytelnianie za pomocą zewnętrznego serwisu jakim jest Facebook. Wszelkie dane związane z logowaniem i rejestracją zostały zamazane ponieważ są to tzw. dane wrażliwe. Każdy z Was jednak bez problemu uzyska do nich dostęp przechodząc przez wszystkie powyższe kroki.

W ramach treningu polecam spróbować pobrać dodatkowe dane z serwisu takie jak np. zdjęcie profilowe. Można tego dokonać korzystając z Graph-API.