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

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

24 marca 2017Robert SenktasDla Developerów

Jeżeli Wasza aplikacja  wymaga funkcji rejestrowania i logowania użytkowników, to warto zapoznać się z usługą Cognito User Pool. Z usługą Cognito można zintegrować się za pomocą API z następujących SDK – Java, .NET, Node.js, Python, PHP i Ruby. Więcej informacji odnoście dostępu do Cognito za pomocą API jest dostępnych tutaj.

Pula użytkowników jest usługą skalowalną, zdolną do zarządzania milionami użytkowników. Jest to usługa bezpieczna, tania i łatwa do użycia.  Z punktu widzenia programisty ma ona następujące zalety:

  • Dane użytkowników przechowywane są w chmurze, czyli nie potrzebuję bazy danych, w cenie otrzymuję zatem bezpieczne i skalowalne miejsce na dane o użytkownikach.
  • Usługa Cognito zintegrowana jest z usługą Simple Notification Service, co oznacza, że kody weryfikujące lub przypominające hasło wysyłane są w sposób automatyczny za pomocą SMS lub email.
  • Usługa User Pool ma wbudowany prosty interfejs do zarządzania użytkownikami, czyli nie muszę implementować żadnych widoków o ile wystarczą mi funkce oferowane przez Cognito.
  • Usługa Cognito obsługuje Multi-Factor Authentication. Właściwość ta może być włączona dla wszystkich użytkowników bez wyjątku lub możemy pozostawić ten wybór użytkownikom, aby sami mogli decydować o bezpieczeństwie swojego profilu.
  • Profil użytkownika Cognito posiada predefiniowane atrybuty takie jak adres email, numer telefonu, imię czy nazwisko. Atrybuty można oznaczać jako wymagane, wówczas nie będzie możliwa rejestracja użytkownika, który nie wprowadzi atrybutów wymaganych w procesie rejestracji użytkownika.
  • Profil użytkownika Cognito można rozszerzyć o atrybuty definiowane bezpośrednio przez nas. Jeżeli jakiegoś atrybutu brakuje na liście atrybutów domyślnych to nic nie stoi na przeszkodzie abyśmy sami zdefiniowali taki atrybut. Jedyne ogranicza nas maksymalna liczba atrybutów, która wynosi 25.
  • Usługa Cognito umożliwia łatwą migrację użytkowników z innego systemu za pomocą plików CSV.
  • Jeżeli wbudowane mechanizmy autoryzacji i autentykacji nie są wystarczające to można taki proces zmodyfikować za pomocą funkcji Lambda.

Usługa User Pool posiada bogatą funkcję, którą wystarczy użyć w swojej aplikacji. Mamy też możliwość modyfikacji domyślnych funkcji i zbudowanie bardziej zaawansowanego procesu rejestracji/autoryzacji/autentykacji. W części pierwszej opiszę proces konfiguracji usługi zwracając szczególną uwagę na istotne aspekty, które mogą mieć wpływ na korzystanie z usługi.

Kolejny ważny aspekt to koszty. Usługa Cognito jest bezpłatna do 50 000 aktywnych użytkowników miesięcznie. Użytkownik aktywny to taki, który wykona jakąś operację związaną z Cognito typu logowanie, zmiana hasła itp. Jedyny koszt jaki będziemy musieli ponieść to koszt wysyłania SMS’ów, o ile nie mamy numeru telefonu w Stanach Zjednoczonych, gdzie pierwsze 100 SMS’ów w miesiącu jest bezpłatne. Cennik usług Cognito i SNS można znaleźć pod linkami https://aws.amazon.com/cognito/pricing/ oraz https://aws.amazon.com/sns/sms-pricing/.

Zaczynajmy konfigurację

Po zalogowaniu się do konta należy przejść do usługi Cognito, która znajduje się w sekcji usług mobilnych. Wybieramy „Manage your User Pools” a następnie „Create Pool”.

Na początek musimy określić nazwę naszej „pool-i”.

Następny krok to konfiguracja atrybutów. W tym kroku można określić atrybuty, które są wymagane podczas rejestracji użytkownika oraz można zaznaczyć atrybuty będące aliasami. Jest to bardzo ważny krok, gdyż po wybraniu atrybutów które są wymagane nie będzie już możliwości zmiany. Jeżeli w przyszłości zajdzie konieczność oznaczenia któregoś z atrybutów jako wymagany, to będzie trzeba stworzyć nową pulę i przenieść użytkowników. Teraz kolej na wyjaśnienie co to są aliasy. Aliasem może być adres email, numer telefonu oraz „prefered username”. Atrybuty oznaczone jako aliasy mogą być używane zamiennie w procesie logowania.

Jeżeli lista atrybutów standardowych jest niewystarczająca, aby spełnić wymagania biznesowe, to możemy zdefiniować dodatkowo 25 atrybutów. Atrybuty dodatkowe można dodawać i modyfikować nawet po utworzeniu „pool-i”.

Kolejny etap to konfiguracja polityk dotyczących siły hasła oraz procesu tworzenia użytkownika.  Do wyboru mamy dwie opcje: albo użytkownicy będą sami mogli się rejestrować albo będą zakładani przez administratora. Ja konfigurowałem „pool-ę” tak, aby użytkownicy aplikacji mogli sami zakładać swoje konta. Jeżeli wybierzemy opcję zakładania kont przez administratora możemy określić czas po jakim konto wygaśnie w przypadku, gdy nie zostanie potwierdzone przez użytkownika.

W kroku „Verifications” mamy możliwość określenia sposobu weryfikacji konta. Podczas zakładania konta musimy udowodnić, że jesteśmy właścicielem podanego numeru telefonu i/lub adresu email. W przypadku, gdy wybierzemy weryfikację adresu email i numeru telefonu, to weryfikacja numeru telefonu odbędzie się automatycznie, a weryfikację adresu email będzie trzeba wymusić za pomocą aplikacji.

Jeżeli chcemy zwiększyć bezpieczeństwo użytkowników to możemy włączyć Multi-Factor Authentication. MFA może zostać włączone dla wszystkich użytkowników bez wyjątku (opcja „Required”) lub możemy pozostawić użytkownikowi możliwość wyboru czy chce używać MFA, czy też nie (opcja „Optional”).

Ostatnim etapem jest umożliwienie Cognito korzystania z usługi SNS, która odpowiedzialna jest za wysyłanie wiadomości email i SMS. Tutaj po prostu wybieramy „Create new role”, wówczas rola z właściwymi uprawnieniami zostanie stworzona automatycznie i przypisana do tworzonej User Pool.

Kolejny krok to możliwość skonfigurowania komunikatów, które będą wysyłane do użytkowników podczas weryfikacji konta. Komunikaty mogą być różne dla SMS i email. Na początek proponuję pozostawić wartości domyślne, zawsze będzie można je później zmienić.

Tagi – tagi wykorzystywane są do oznaczania zasobów na koncie AWS w celu późniejszej łatwiejszej identyfikacji np. na fakturze. Jeżeli jesteście ciekawi tej funkcji polecam przeczytanie dokumentacji.

Usługa Cognito umożliwia zapamiętywanie urządzeń wykorzystywanych przez użytkownika podczas logowania do aplikacji. Gdy opcja jest włączona, urządzenie (telefon, laptop) otrzymuje specjalny identyfikator podczas pierwszego logowania i może trafić na listę zaufanych urządzeń. Ten mechanizm powala na wyłączenie MFA dla zaufanych urządzeń, o ile oczywiście odblokowaliśmy używanie MFA dla „pool-i”.

Do wyboru mamy domyślną opcję „No” – czyli nie zapamiętujemy urządzeń, z których użytkownik się loguje, możemy także wybrać opcję „Always” – wówczas wszystkie urządzenia są zapamiętywane dla każdego z użytkowników. Ostatnią możliwością jest pozostawienie decyzji użytkownikowi – „User Opt-in”. Jeżeli rozważamy włączenie tej opcji w naszej aplikacji musimy pamiętać, że będzie trzeba zaimplementować interfejs graficzny oraz logikę aplikacji do obsługi tej funkcji.

„Apps” – to zasadniczo najważniejszy element do konfiguracji w kontekście wykorzystania usługi Cognito we własnej aplikacji. W tym miejscu uzyskujemy dane niezbędne do połączenia się z usługą oraz konfigurujemy sposób wymiany danych logownia („username” i „password”). Dodatkowo możemy również określić do jakich atrybutów dana aplikacja będzie miała dostęp.

Dwa najważniejsze ustawienia z punktu widzenia aplikacji to:

  • „Generate client secret” – zalecam wyłączenie tej funkcji na czas zapoznawania się z usługą. Jeżeli ta opcja pozostanie włączona, to trzeba będzie podpisywać każde żądanie wysyłane do usł Wiąże się to z implementacją kodu podpisującego żądania. Mój przykład aplikacji nie będzie działał, gdy opcja pozostanie włączona.
  • „Enable sign-in API for server-based authentication” – ta opcja włącza uproszczoną metodę przesyłania użytkownika i hasła w postaci jawnej. Jeżeli nie wybierzemy tej opcji trzeba będzie korzystać z protokołu SRP. Ja wybrałem prostszą opcję na potrzeby demo i zaznaczyłem tę opcję.

Dla każdej aplikacji możemy określić atrybuty, które będą widoczne dla aplikacji oraz atrybuty, które aplikacja będzie mogła modyfikować. Na początek pozostawmy ustawienia domyślne – możemy je później modyfikować w zależności od potrzeb.

„Triggers” – cały proces rejestracji i autentykacji możemy dowolnie modyfikować za pomocą  funkcji AWS Lambda. Na razie pominę ten krok, gdyż chciałbym skupić się na początku na zaprezentowaniu podstawowych funkcji. Procesowi tworzenia własnego „workflow” poświęcę ostatnią, trzecią część poświęconą Amazon Cognito User Pool.

Ostatnim etapem jest weryfikacja ustawień. Jeżeli jesteśmy pewni, że już wszystko skonfigurowaliśmy prawidłowo nie pozostaje nam nic innego jak utworzyć „pool-ę” i zacząć najciekawszą część, czyli wykorzystanie utworzonej „pool-i” w naszej aplikacji.

Wkrótce dostępna będzie kolejna część prezentująca prostą aplikację konsolową, za pomocą, której będzie można przejść przez podstawowe funkcje takie jak rejestracja użytkownika, weryfikacja, zmiana i resetowanie hasła.

: Cognito, Cognito User Pool, CUP, Lambda, Multi-Factor Authentication, Simple Notification Service, SNS
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

CloudFormation i StackSets, łatwe zarządzanie na dużą skalę

13 września 2017Łukasz Dorosz

Spotkanie z kuzynką Atheną, wujkiem DynamoDB (TTL) i ciotką Lambdą. Ze strony rodziny Amazon AWS

8 marca 2017Adam Smolnik

Kto utworzył ten serwer?!

13 lipca 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.