• Ogólne
  • Dla Architektów
  • Bezpieczeństwo

Wprowadzenie do AWS Cognito – konfiguracja środowiska programistycznego dla .NET

4 kwietnia 2017Robert SenktasDla Developerów

W kolejnej części cyklu o Cognito opiszę jak skonfigurować lokalne środowisko tak, aby możliwy był dostęp do usługi Cognito z poziomu aplikacji .NET. Co to jest usługa Cognito oraz jak utworzyć i skonfigurować User Pool zostało opisane w pierwszej części cyklu o Cognito. Cały cykl będzie składał się z kilku artykułów opisujących kolejne etapy prowadzące do utworzenia prostej aplikacji konsolowej oraz klienta Cognito dla .NET. Aplikacja umożliwi zapoznanie się z następującymi funkcjami usługi:

  • Rejestracja użytkownika
  • Weryfikacja numeru telefonu i adresu email
  • Logowanie użytkownika
  • Zmiana hasła oraz reset hasła
  • MFA oraz zarządzanie urządzeniami zaufanymi
  • Użycie AWS Lambda do stworzenia własnego procesu autoryzacji i autentykacji

Zanim zaczniemy tworzyć aplikację musimy skonfigurować środowisko oraz zainstalować narzędzia niezbędne w procesie implementacji. Wystarczy do tego kilka prostych kroków, opisanych poniżej.

Krok 1 - Instalacja i konfiguracja SDK

Fascynującą przygodę z Amazon Web Services (AWS) zaczynamy od zainstalowania narzędzi programistycznych. Najlepiej od razu zainstalować wszystkie narzędzia, czyli pakiet AWS Tools for Windows dostępny na stronie https://aws.amazon.com/sdk-for-net/. Pakiet ten zawiera wszystkie niezbędne komponenty do komunikacji się z AWS z poziomu stacji roboczej:

  • AWS SDK for .NET
  • AWS Tools for Windows PowerShell (Tools for Windows PowerShell User Guide)
  • AWS Toolkit for Visual Studio (Toolkit for Visual Studio User Guide)

Krok 2 - Dodawanie użytkownika

Po zainstalowaniu pakietu musimy skonfigurować klucze dostępu, które umożliwią nam współpracę SDK z naszym kontem AWS. Cały proces szczegółowo opisany jest w dokumentacji Create an AWS Account and Credentials, ja skupię się na głównych punktach, niezbędnych do rozpoczęcia pracy z SDK. Aby móc korzystać z AWS SDK dla .NET potrzebujecie „access key” i „secret key”. Oba klucze wykorzystywane są podczas komunikacji SDK z usługą AWS. Aby uzyskać wspomniane klucze trzeba stworzyć użytkownika w usłudze AWS Identity and Access Management (IAM). Aby klucze zostały wygenerowane dla tworzonego użytkownika trzeba zaznaczyć opcję „Programmatic access”. Klucze dostępu zapewnią nam możliwość komunikacji z kontem AWS, ale nie będzie możliwy dostęp do żadnej z usług. Aby zapewnić dostęp do usługi Cognito lub każdej innej należy nadać użytkownikowi odpowiednie uprawnienia. Robimy to w kroku konfiguracji „Permissions”. W moim przypadku wybrałem istniejąca politykę „AmazonCognitoDeveloperAuthenticatedIdentities” która umożliwi dostęp do usługi Cognito za pomocą API. Poniżej przedstawiony jest cały proces, który składa się z 4 prostych kroków:

looks_one
„Set user details” – gdzie wprowadzamy nazwę użytkownika oraz wybieramy sposób dostępu w moim przypadku jest to „Programmatic access”
looks_two
„Set permissions” – gdzie nadajemy odpowiednie uprawnienia dla tworzonego użytkownika – w moim przypadku wybieram istniejącą politykę bezpieczeństwa – „AmazonCognitoDeveloperAuthenticatedIdentities”
looks_3
„Review” – i jeżeli wszystko jest OK, przechodzimy do ostatniego kroku, w którym generowane są klucze dzięki którym uzyskam dostęp do usługi Cognito. Pobieram plik CSV, który zawiera klucze dostępowe i zapisuję go w bezpiecznym miejscu. Klucze te przydadzą się w następnym kroku podczas tworzenia profilu w Visual Studio.

Krok 3 - Utworzenie profilu

Wraz z SDK instaluje się dodatek do Visual Studio o wdzięcznej nazwie AWS explorer. Dostępny jest on z menu View->AWS Explorer. W dużym skrócie AWS Explorer pozwala nam zarządzać profilami oraz usługami AWS z poziomu Visual Studio. Jest to niezwykle wygodne, gdyż nie musimy przełączać się pomiędzy VS a np. webową konsolą AWS,.aby coś sprawdzić lub skonfigurować. Uwaga! – Z poziomu AWS Explorer widoczne są wszystkie dostępne usługi, ale modyfikować możemy tylko te do których daliśmy uprawnienia naszemu użytkownikowi. W przpadku stworzonego w poprzenim kroku użytkownika nie będziecie mieli dostępu do żadnej z usług widocznych w AWS Explorer, wynika to z faktu, że daliśmy uzytkownikowi dostęp tylko i wyłącznie do usługi Cognito.

Dodajmy profil – ja nazwałem swój „cognito-poc” (nazwa nie ma większego znaczenia), ale warto użyć nazwy sugerującej cel bądź rolę tworzonego profilu. W pola „Access Key Id” oraz „Secret Access Key” wpisujemy wartości z pliku CSV, który pobrałem w poprzednim kroku. Wybieramy OK i profil zostanie utworzony.

Krok 4 - Stworzenie i konfiguracja solucji

Na potrzeby demonstracji wybrałem aplikację konsolową – czyli tworzę pustą solucję w Visual Studio a następnie dodaję projekt aplikacji konsolowej o nazwie „Cognito.Console” i projekt Class Library o nazwie „Cognito.Client”. Moja solucja wygląda teraz następująco:

Następnie dodaję do solucji pakiet „CognitoIdentityProvider”. Dodaję go do obu projektów.

W kolejnym kroku konfiguruję nazwę profilu oraz region w którym została utworzona „pool-a”. Robię to w pliku App.Config aplikacji konsolowej. Podaję nazwę profilu utworzonego w poprzenim etapie.

Jeżeli nie pamiętacie gdzie utworzyliście „pool-ę” to zalogujcie się do konsoli webowej AWS i sprawdzcie konfigurację. Lista regionów wyświetla się w prawym górnym rogu. Jeżeli pamięć nas zawodzi, to trzeba się przeklikać przez wszystkie dostępne regiony i sprawdzić gdzie nasza wcześniej utworzona „pool-a” ukryła się. Dla ułatwienia dodam, że region domyślny to US West (Oregon) i jeżeli nic nie przełączaliście po zalogowaniu się do AWS, to pewnie tam warto zacząć poszukiwania.

Gdy już znajdziemy naszą „pool-ę” to warto pobrać sobie dwie wartości: „Pool Id”, które dostępne jest w zakładce „Pool details” oraz „App client Id” z zakładki „Apps”. Dla ułatwienia, na poniższych ekranach zaznaczyłem potrzebne dane.

Obie wartości zapisałem sobie w zmiennych środowiskowych o nazwach „CognitoPoolId” i „CognitoClientId”. Można zapytać, dlaczego nie zapisałem tych wartości np. w pliku app.config? Otóż, nie chciałbym, aby moje dane znalazły się w publicznie widocznym repozytorium. Pamiętajcie, konto AWS skojarzone jest z Waszą lub firmową kartą kredytową, także chrońcie swoje dane.

Ustawień zmiennych dokonałem z poziomu aplikacji consolowej za pomocą dwóch linijek kodu:

Environment.SetEnvironmentVariable("CognitoPoolId", "", EnvironmentVariableTarget.User);

Environment.SetEnvironmentVariable("CognitoClientId", "", EnvironmentVariableTarget.User);

Uwaga! Nie wkomitujcie sobie kodu z waszymi sekretnymi danymi !

Dane później odczytujemy w analogiczny sposób.

var poolId = Environment.GetEnvironmentVariable("CognitoPoolId",EnvironmentVariableTarget.User);

var clientId = Environment.GetEnvironmentVariable("CognitoClientId", EnvironmentVariableTarget.User);

Teraz czas na ostateczny test, w którym sprawdzę, czy faktycznie mogę z poziomu kodu dostać się do „pool-i”.

using (var client = new AmazonCognitoIdentityProviderClient())
{
    var response = client.DescribeUserPool(new DescribeUserPoolRequest() {UserPoolId = poolId});
    System.Console.WriteLine(response.HttpStatusCode);
 };

Jeżeli otrzymamy HttpStatusCode = OK to świetnie. Znaczy, że połączenie z „pool-ą” działa i nie popełniliśmy żadnego błędu podczas konfiguracji.

Projekt jest dostępny na GitHub – https://github.com/RobsonAutomator/CognitoPOC. Zawiera tylko prosty kod opisany w artykule. Implementację pozwalającą na zakładanie użytkowników, logowanie oraz zmianę hasła opiszemy w kolejnej części cyklu o Cognito.

Krok dodatkowy

Jak już wiecie usługa Cognito korzysta także z dwóch usług Simple Email Service i Simple Notification Service. W dużym uproszczeniu pierwsza służy do wysłania i odbierania email-i a druga do wysyłania wiadomości SMS (i nie tylko). Aby móc skorzystać z usługi SES trzeba zweryfikować każdy z adresów email, na który chcemy wysyłać wiadomości. Robi się to bardzo prosto – wystarczy wejść do panelu usługi SES i w „Identity Management” wybrać „Email address” a następnie wprowadzić adres email, który planujemy wykorzystać podczas pracy z Cognito. Na podany adres otrzymamy link weryfikacyjny, ktory wystarczy kliknąć i gotowe – email zostanie zweryfikowany. Poniżej przedstawiam dwa ekrany dla zobrazowania prostoty całego procesu.

: .NET, AWS Explorer, AWS Toolkit, AWS Tools, Cognito, Cognito User Pool, IAM, Identity and Access Management, PowerShell, SDK, SES, Simple Email Service, Simple Notification Service, SNS, Visual Studio
Robert Senktas
Robert na co dzień pracuje jako Sitecore i Cloud Architect oraz Trener w SoftServe. Robert ma ponad 16 lat doświadczenia we wdrażaniu projektów programistycznych zaczynając od systemów wbudowanych a kończąc na rozwiązaniach w ‘chmurze’. Jego pasją jest uczenie się i wykorzystywanie najnowszych technologii w komercyjnych wdrożeniach.

Related Articles

Budowanie prostego schedulera serwerów EC2

11 sierpnia 2017Tomasz Stachlewski

Wprowadzenie do usługi Cognito User Pool w Amazon Web Services

24 marca 2017Robert Senktas

Jak przełączać się pomiędzy różnymi kontami AWS

20 kwietnia 2017Tomasz Stachlewski

Najnowsze wpisy

  • Wiosenne porządki z AWS Glue cz.3 4 września 2018
  • Jak przyśpieszyć ładowanie zawartości stron WWW? 28 czerwca 2018
  • Wiosenne porządki z AWS Glue cz.2 22 czerwca 2018

Szkolenia AWS

  • Kursy wprowadzające
  • Dla Architektów
  • Dla Developerów
  • SysOps
  • DevOps
  • Big Data
  • Bezpieczeństwo

ACTION Centrum Edukacyjne

Znajdź nas na:

Facebook
LinkedIn
YouTube
RSS

Copyright by ACTION Centrum Edukacyjne Sp. z o.o.