Uwierzytelnianie użytkownika w aplikacjach internetowych i iOS za pomocą AWS Cognito (część 1)

Opublikowany: 2022-03-10
Szybkie podsumowanie ↬ Zarówno programiści, jak i organizacje szukają sposobu na zwiększenie elastyczności dzięki rozwiązaniom mobilnym. Istnieje chęć skrócenia czasu od pomysłu do testu. Jako programista często napotykam jedną przeszkodę, która może spowolnić początkową budowę hipotezy mobilnej: zarządzanie użytkownikami.

Przez lata zbudowałem od podstaw co najmniej trzy systemy zarządzania użytkownikami. Wiele z tego podejścia może opierać się na schemacie, ale zawsze istnieje kilka kluczowych elementów, które należy dostosować do konkretnego klienta. To wystarczająca obawa, że ​​w celu zaspokojenia tej potrzeby powstała cała kategoria usług zarządzania użytkownikami, uwierzytelniania i autoryzacji. Usługi takie jak Auth0 oferują całe rozwiązania oparte na zarządzaniu użytkownikami i tożsamością, z którymi mogą integrować się programiści.

Jedną z usług, która zapewnia tę funkcjonalność, jest Cognito Amazon Web Services (AWS). Cognito to narzędzie umożliwiające użytkownikom rejestrowanie się i logowanie w tworzonych przez Ciebie aplikacjach internetowych i mobilnych . Oprócz tej funkcjonalności umożliwia również przechowywanie danych użytkownika w trybie offline oraz zapewnia synchronizację tych danych. Jak twierdzi Amazon: „Dzięki Amazon Cognito możesz skupić się na tworzeniu wspaniałych aplikacji, zamiast martwić się tworzeniem, zabezpieczaniem i skalowaniem rozwiązania do obsługi zarządzania użytkownikami, uwierzytelniania i synchronizacji między urządzeniami”.

Niedocenianie karuzeli

Karuzele tak naprawdę nie zasługują na złą reputację, którą zdobyły przez lata. Mogą okazać się bardzo skuteczne i mieć wiele kształtów i rozmiarów. Przeczytaj powiązany artykuł →

W zeszłym roku Amazon wprowadził dodatek do swojej usługi Cognito, niestandardowe pule użytkowników. Ta funkcjonalność zapewnia teraz to, czego potrzebujemy ja i inni programiści, aby mieć kompletny, konfigurowalny, wieloplatformowy system zarządzania użytkownikami, z elastycznością niezbędną do dopasowania do większości przypadków użycia. Aby zrozumieć dlaczego, musimy rzucić okiem na to, czym jest zarządzanie użytkownikami i jakie problemy rozwiązuje.

Więcej po skoku! Kontynuuj czytanie poniżej ↓
AWS Cognito
Niestandardowy diagram puli użytkowników Cognito (wyświetl dużą wersję)

W tym artykule większość czasu spędzimy przechodząc przez proces konfigurowania puli użytkowników dla naszych potrzeb. Następnie zintegrujemy tę pulę użytkowników z aplikacją na iOS i umożliwimy użytkownikowi zalogowanie się i pobranie atrybutów powiązanych z jego kontem użytkownika. Na koniec będziemy mieli ograniczoną aplikację demonstracyjną, ale taką, która obsługuje sedno zarządzania użytkownikami. Ponadto, po tym, jak to się stanie, pojawi się artykuł uzupełniający, który zajmie się tym nieco głębiej.

Czego potrzebujemy od zarządzania użytkownikami?

Jeśli masz aplikację mobilną lub internetową, czego dokładnie potrzebujesz w zakresie zarządzania użytkownikami? Chociaż logowanie użytkownika jest prawdopodobnie pierwszą rzeczą, o której myślisz, nie możemy na tym poprzestać. Jeśli potrzebujemy elastycznego systemu zarządzania użytkownikami, który działałby w większości przypadków użycia aplikacji internetowych i mobilnych, musiałby mieć następującą funkcjonalność:

  • login użytkownika i hasło;
  • bezpieczne haszowanie i przechowywanie haseł;
  • zmiany hasła;
  • polityka i walidacja haseł;
  • wyzwalacze cyklu życia użytkownika (e-mail powitalny, e-mail pożegnalny itp.);
  • atrybuty użytkownika (imię, nazwisko itp.);
  • wymagana konfiguracja i opcjonalne atrybuty na użytkownika;
  • obsługa zapomnianych haseł;
  • walidacja numeru telefonu przez SMS;
  • Weryfikacja adresu e-mail;
  • Dostęp API do punktów końcowych na podstawie uprawnień;
  • bezpieczne przechowywanie tokena(ów) dostępu na urządzeniach mobilnych;
  • przechowywanie offline atrybutów użytkownika dla urządzeń mobilnych;
  • synchronizacja atrybutów użytkownika dla stanów online i offline;
  • uwierzytelnianie wieloskładnikowe.

Chociaż zarządzanie użytkownikami może na pierwszy rzut oka wydawać się systemem logowania, funkcjonalność musi wykraczać daleko poza to, aby system był naprawdę wystarczająco elastyczny, aby obsłużyć większość przypadków użycia. To wyraźnie wykracza poza samą nazwę użytkownika i hasło.

W tym miejscu należy przywołać jeszcze jeden element: bezpieczeństwo. Jednym z wymagań każdego systemu zarządzania użytkownikami jest to, że musi być stale oceniany pod kątem bezpieczeństwa systemu jako całości. Wiele niestandardowych systemów zarządzania użytkownikami ma luki, które po prostu nie zostały naprawione. W ciągu ostatniego roku miały miejsce naruszenia bezpieczeństwa systemów zarządzania użytkownikami takich firm jak Dropbox, Dailymotion, Twitter i Yahoo. Jeśli zdecydujesz się zbudować niestandardowe rozwiązanie, jesteś gotowy do zabezpieczenia swojego systemu.

Wejdź do Amazon Cognito

Amazon Cognito to zarządzana usługa, która umożliwia zintegrowanie elastycznego i skalowalnego systemu zarządzania użytkownikami z aplikacjami internetowymi i mobilnymi. Cognito zapewnia dwa różne sposoby korzystania z usługi: tożsamości sfederowane, które umożliwiają logowanie się za pośrednictwem sieci społecznościowych, takich jak Facebook, oraz pule użytkowników, które zapewniają całkowicie niestandardowe możliwości zarządzania użytkownikami dla określonej aplikacji lub pakietu aplikacji.

Tożsamości federacyjne są świetne, jeśli chcesz, aby użytkownicy mogli logować się za pomocą Facebooka (lub Google, Amazon itp.), ale oznacza to, że część procesu zarządzania użytkownikami zostanie zlecona Facebookowi. Chociaż w niektórych przypadkach może to być akceptowalne, użytkownicy mogą nie chcieć łączyć swojego konta na Facebooku z Twoją aplikacją. Ponadto możesz chcieć bezpośrednio zarządzać większą częścią cyklu życia użytkownika, a do tego tożsamości federacyjne nie są tak elastyczne. Na potrzeby dzisiejszego artykułu skupimy się na pulach użytkowników, ponieważ zapewniają one elastyczność niezbędną dla solidnej platformy zarządzania użytkownikami, która pasowałaby do większości przypadków użycia. W ten sposób uzyskasz podejście, które można zastosować w większości projektów.

Ponieważ jest to usługa AWS, istnieją inne zalety korzystania z Cognito. Cognito może zintegrować się z API Gateway, aby zapewnić bezbolesny sposób autoryzacji dostępu do API na podstawie tokenów zwracanych z logowania Cognito. Ponadto, jeśli już korzystasz z innych usług AWS dla swojej aplikacji mobilnej, możesz użyć swojej puli użytkowników jako dostawcy tożsamości dla swoich poświadczeń AWS.

Podobnie jak w przypadku każdej innej usługi AWS, wiąże się to z kosztami. Ceny Cognito są oparte na miesięcznych aktywnych użytkownikach (MAU). Wspaniałą wiadomością dla większości programistów jest to, że istnieje nieograniczona, bezpłatna warstwa, która jest ograniczona do 50 000 jednostek MAU podczas korzystania z niestandardowej puli użytkowników. Jeśli masz dużą aplikację, zapewni to dużą liczbę użytkowników, którzy będą mogli pilotować nowe podejście do zarządzania użytkownikami. Podejrzewam jednak, że wielu z Was ma doświadczenia, które nigdy nie wykroczą poza 50 000 użytkowników. W takim przypadku podstawowe zarządzanie użytkownikami będzie prawie bezpłatne. Jedynym wyjątkiem są inne usługi AWS, z których będziesz korzystać w ramach procesu zarządzania użytkownikami, takie jak Lambda, SNS i S3.

Tworzenie puli użytkowników

Pierwszym krokiem w integracji puli użytkowników z aplikacją mobilną jest utworzenie puli użytkowników Cognito. To da nam wartości konfiguracyjne potrzebne do podłączenia do naszej przykładowej aplikacji. Aby utworzyć nową pulę użytkowników, przejdź przez kreatora dostępnego w konsoli Cognito firmy Amazon.

Przejdźmy przez proces tworzenia puli użytkowników. Muszę cię ostrzec, że jest to długotrwały proces. Pod wieloma względami jest to dobra rzecz, ponieważ pokazuje obszary elastyczności. Jednak będziesz chciał wziąć filiżankę kawy i zapiąć pasy do tego.

1. Imię

Pierwszym krokiem w tworzeniu puli użytkowników jest ustawienie nazwy dla puli użytkowników i wybranie podejścia, które podejmiesz, aby utworzyć pulę użytkowników. Możesz przejrzeć ustawienia domyślne lub „przejść” przez ustawienia. Ponieważ chcemy mieć dobrą praktyczną wiedzę na temat konfiguracji puli użytkowników, wybierz opcję „Przejdź przez ustawienia”.

Krok 1 w tworzeniu puli użytkowników
Pierwszy krok w tworzeniu puli użytkowników (Wyświetl dużą wersję)

2. Atrybuty

Konfiguracja atrybutów wymaga trochę przemyślenia. Dla każdej puli użytkowników musisz określić, które atrybuty będą przechowywane w systemie, a które są wymagane. Ponieważ system wymusza wymagane wartości, nie można tego zmienić w dalszej części. Najlepszym podejściem jest tutaj zaznaczenie tylko naprawdę istotnych wartości zgodnie z wymaganiami. Ponadto, jeśli chcesz, aby użytkownicy mogli logować się za pomocą swojego adresu e-mail, oznacz go jako alias.

Jeśli chcesz uwzględnić wartości niestandardowe, musisz to zrobić również tutaj. Każda wartość niestandardowa będzie miała typ, opcjonalne reguły walidacji oraz opcję, która może być modyfikowana (możliwa do zmiany) lub niezmienna (nie można jej zmienić). Istnieje sztywny limit 25 atrybutów niestandardowych.

Na koniec należy wspomnieć o nazwach użytkowników. Wartość nazwy użytkownika dla każdego użytkownika jest niezmienna (nie można jej zmienić). Oznacza to, że w większości przypadków automatyczne wygenerowanie tej wartości miałoby sens. Dlatego istnieje wartość „preferowanej nazwy użytkownika”. Jeśli chcesz, aby użytkownicy mieli wartość nazwy użytkownika, którą mogą edytować, po prostu oznacz atrybut „preferowana nazwa użytkownika” jako alias. Jeśli chcesz, aby użytkownicy po prostu logowali się za pomocą swojego adresu e-mail, zaznacz atrybut „email” jako wymagany i jako alias.

W przypadku naszej aplikacji demonstracyjnej wybrałem ustawienie „e-mail”, „imię” i „nazwisko rodowe”.

Krok 2 w tworzeniu puli użytkowników
Konfigurowanie atrybutów użytkownika dla puli użytkowników (Wyświetl dużą wersję)

3. Polityki

Po skonfigurowaniu atrybutów będziesz mógł skonfigurować zasady dla konta. Pierwszą polityką do skonfigurowania jest polityka haseł. Polityka umożliwia skonfigurowanie zarówno długości, jak i tego, czy potrzebujesz cyfr, znaków specjalnych, wielkich czy małych liter. Ta zasada będzie egzekwowana zarówno w przypadku haseł wprowadzanych przez użytkowników, jak i haseł przypisywanych użytkownikom przez administratorów.

Kolejne zasady dotyczą rejestracji użytkowników. W przypadku aplikacji publicznej prawdopodobnie zezwolisz użytkownikom na samodzielną rejestrację. Jednak w zależności od typu aplikacji możesz ograniczyć rejestrację i ustawić system tylko na zaproszenie. Ponadto będziesz musiał skonfigurować, jak szybko te zaproszenia wygasną, jeśli nie będą używane.

W przypadku naszej aplikacji demonstracyjnej wybrałem tylko wartości domyślne, z wyjątkiem tego, że nie chcę, aby użytkownicy mogli rejestrować się samodzielnie. Mając te wartości, możemy przejść do weryfikacji.

Krok 3 w tworzeniu puli użytkowników
Konfigurowanie zasad dla puli użytkowników (Wyświetl dużą wersję)

4. Weryfikacje

Etap weryfikacji pozwala skonfigurować uwierzytelnianie wieloskładnikowe, a także weryfikację e-mailową i telefoniczną. Chociaż ta funkcja jest stosunkowo łatwa do skonfigurowania w konsoli, pamiętaj, że musisz poprosić o zwiększenie wydatków na AWS SNS, jeśli chcesz zweryfikować numery telefonów lub użyć uwierzytelniania wieloskładnikowego.

W naszej aplikacji demonstracyjnej wybrałem tylko wartości domyślne.

Krok 4 w tworzeniu puli użytkowników
Konfigurowanie weryfikacji dla puli użytkowników (Wyświetl dużą wersję)

5. Dostosowanie wiadomości

Ten krok pozwala dostosować wiadomości e-mail i SMS, które będą wysyłane z puli użytkowników, a także adresy e-mail „od” i „odpowiedz do”. Na potrzeby naszej aplikacji demonstracyjnej zostawię tutaj wartości domyślne i będę kontynuował.

Krok 5 w tworzeniu puli użytkowników
Konfigurowanie komunikatów cyklu życia dla puli użytkowników (Wyświetl dużą wersję)

6. Tagi

Jeśli jesteś nowym użytkownikiem AWS, możesz nie musieć określać żadnych tagów. Jeśli jednak Twoja organizacja regularnie korzysta z AWS, tagi umożliwiają analizowanie wydatków i przypisywanie uprawnień za pomocą uprawnień. Na przykład niektóre organizacje określają tagi według środowiska (opracowanie, etapowanie, produkcja) i według projektu.

Bez względu na to, co wprowadzisz w tym kroku, nie wpłynie to na naszą aplikację demonstracyjną.

Krok 6 w tworzeniu puli użytkowników
Dodawanie tagów do puli użytkowników (Wyświetl dużą wersję)

7. Urządzenia

Kolejny krok pozwala określić, czy pula użytkowników będzie pamiętała urządzenia użytkownika. Jest to dodatkowy krok bezpieczeństwa, który pozwala zobaczyć, na jakich urządzeniach zalogowano się na określone konto. Ma to dodatkową wartość, gdy korzystasz z uwierzytelniania wieloskładnikowego (MFA). Jeśli urządzenie zostanie zapamiętane, możesz nie wymagać tokena MFA przy każdym logowaniu.

Na potrzeby aplikacji demonstracyjnej wybrałem ustawienie wartości „Zawsze”.

Krok 7 w tworzeniu puli użytkowników
Konfigurowanie obsługi urządzeń dla puli użytkowników (Wyświetl dużą wersję)

8. Klienci aplikacji

Dla każdej aplikacji, dla której chcesz korzystać z puli użytkowników (takiej jak aplikacja na iOS, aplikacja internetowa, aplikacja na Androida itp.), należy utworzyć aplikację. Możesz jednak wrócić i utworzyć je po utworzeniu puli użytkowników, więc nie ma na razie pilnej potrzeby dodawania ich wszystkich.

Każda aplikacja ma kilka wartości, które możesz skonfigurować. W przypadku tej aplikacji demonstracyjnej nadamy aplikacji nazwę, a następnie pozostawimy wartości domyślne. Następnie możesz skonfigurować atrybuty użytkownika, które każda aplikacja może odczytywać i zapisywać.

Krok 8 w tworzeniu puli użytkowników
Konfigurowanie aplikacji klienckich dla puli użytkowników (Wyświetl dużą wersję)

Możesz ustawić dowolne wartości w tym kroku, o ile adres e-mail, nazwisko i imię są czytelne i możliwe do zapisania przez aplikację. Przed kontynuowaniem kliknij opcję „Utwórz klienta aplikacji”.

9. Wyzwalacze

Dzięki wyzwalaczom możesz użyć funkcji Lambda, aby całkowicie dostosować proces cyklu życia użytkownika. Na przykład, jeśli chcesz, aby użytkownicy z adresem e-mail z domeny Twojej firmy mogli się zarejestrować, możesz dodać funkcję Lambda dla wyzwalacza „Przed rejestracją”, aby przeprowadzić tę weryfikację i odrzucić każde żądanie rejestracji, które nie przechodzi.

Do naszej aplikacji demonstracyjnej nie dodam żadnych wyzwalaczy.

Krok 9 w tworzeniu puli użytkowników
Konfigurowanie wyzwalaczy dla puli użytkowników (Wyświetl dużą wersję)

10. Recenzja

Zdaję sobie sprawę, że mogło się to wydawać długim i żmudnym procesem. Pamiętaj jednak, że każdy krok w tworzeniu puli użytkowników ma elastyczność, która pozwala na dopasowanie rozwiązania do większej liczby przypadków użycia. A teraz wiadomość, na którą czekałeś: To jest ostatni krok.

Po prostu przejrzyj ustawienia, aby upewnić się, że poprawnie skonfigurowałeś je dla aplikacji demonstracyjnej. Na tym ekranie możesz cofnąć się i edytować dowolne z poprzednich ustawień. Po utworzeniu puli użytkowników nie można zmienić niektórych wartości konfiguracyjnych (takich jak wymagane atrybuty).

Po utworzeniu nowej puli użytkowników możesz teraz przystąpić do ich integracji w przykładowej aplikacji na iOS przy użyciu zestawu AWS SDK dla systemu iOS.

Krok 10 w tworzeniu puli użytkowników
Ostateczny przegląd puli użytkowników przed utworzeniem (wyświetl dużą wersję)

Konfigurowanie aplikacji iOS dla puli użytkowników

Stworzyłem przykładową aplikację na iOS, która integruje się z Cognito, aby umożliwić użytkownikowi zalogowanie się, wylogowanie, wpisanie imienia i nazwiska oraz ustawienie hasła. W przypadku tej wstępnej wersji demonstracyjnej rejestracja użytkownika nie jest uwzględniona, więc użyłem konsoli Cognito, aby dodać nowego użytkownika do testów.

Kod tej aplikacji można znaleźć w moim repozytorium GitHub.

Konfiguracja zależności

Ta aplikacja używa CocoaPods do zarządzania zależnościami. W tym momencie jedynymi zależnościami są określone elementy AWS iOS SDK, które odnoszą się do pul użytkowników Cognito.

(Pełny opis CocoaPods wykracza poza zakres tego artykułu, jednak zasób na stronie CocoaPods pomoże ci rozpocząć pracę, jeśli ta koncepcja jest dla ciebie nowa.)

Zawartość pliku Podfile dla tej aplikacji można zobaczyć poniżej:

 source 'https://github.com/CocoaPods/Specs.git' platform :ios, '10.0' use_frameworks! target 'CognitoApplication' do pod 'AWSCore', '~> 2.5.5' pod 'AWSCognitoIdentityProvider', '~> 2.5.5' end

Zakładając, że CocoaPods jest zainstalowany na twoim komputerze, możesz po prostu uruchomić pod install , a niezbędne zależności zostaną zainstalowane.

Konfiguracja puli użytkowników

Następnym krokiem jest uwzględnienie wartości dla puli użytkowników i aplikacji klienckiej. Aplikacja demonstracyjna jest skonfigurowana do korzystania z pliku CognitoApplication/CognitoConfig.plist , z którego pobierane są te informacje. Należy zdefiniować cztery wartości:

  • region (ciąg)
    To jest region, w którym utworzono pulę użytkowników. Musi to być standardowy identyfikator regionu, taki jak us-east-1 lub ap-southeast-1 .
  • poolId (ciąg)
    To jest identyfikator utworzonej puli użytkowników.
  • clientId (ciąg)
    Jest to identyfikator clientId skonfigurowany jako część aplikacji dołączonej do puli użytkowników.
  • clientSecret (ciąg)
    To jest clientSecret skonfigurowany jako część aplikacji dołączonej do puli użytkowników.

Mając ten plik i odpowiednie wartości, można uruchomić aplikację demonstracyjną. Jeśli podczas uruchamiania wystąpią jakiekolwiek wyjątki, upewnij się, że podałeś każdą z czterech wartości pokazanych poniżej i że plik znajduje się we właściwym katalogu.

plist Konfiguracja w Xcode
Konfiguracja puli użytkowników w Xcode z plikiem plist (wyświetl dużą wersję)

Integracja delegatów aplikacji

Rdzeń integracji z Amazon Cognito znajduje się w AppDelegate aplikacji. Naszym pierwszym krokiem jest upewnienie się, że skonfigurowaliśmy logowanie i połączyliśmy się z naszą pulą użytkowników. W ramach tego procesu przypiszemy naszego AppDelegate jako delegata puli użytkowników. W tym podstawowym przykładzie możemy zachować tę logikę w AppDelegate . W przypadku większych projektów sensowne może być zajęcie się tym gdzie indziej.

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // set up logging for AWS and Cognito AWSDDLog.sharedInstance.logLevel = .verbose AWSDDLog.add(AWSDDTTYLogger.sharedInstance) // set up Cognito config self.cognitoConfig = CognitoConfig() // set up Cognito setupCognitoUserPool() return true } func setupCognitoUserPool() { // we pull the needed values from the CognitoConfig object // this just pulls the values in from the plist let clientId:String = self.cognitoConfig!.getClientId() let poolId:String = self.cognitoConfig!.getPoolId() let clientSecret:String = self.cognitoConfig!.getClientSecret() let region:AWSRegionType = self.cognitoConfig!.getRegion() // we need to let Cognito know which region we plan to connect to let serviceConfiguration:AWSServiceConfiguration = AWSServiceConfiguration(region: region, credentialsProvider: nil) // we need to pass it the clientId and clientSecret from the app and the poolId for the user pool let cognitoConfiguration:AWSCognitoIdentityUserPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: clientId, clientSecret: clientSecret, poolId: poolId) AWSCognitoIdentityUserPool.register(with: serviceConfiguration, userPoolConfiguration: cognitoConfiguration, forKey: userPoolID) let pool:AWSCognitoIdentityUserPool = AppDelegate.defaultUserPool() // we need to set the AppDelegate as the user pool's delegate, which will get called when events occur pool.delegate = self }

Po wprowadzeniu tej konfiguracji musimy skonfigurować metody delegowania dla puli użytkowników. Implementowany przez nas protokół to AWSCognitoIdentityInteractiveAuthenticationDelegate . Ten pełnomocnik zostanie wywołany za każdym razem, gdy użytkownik będzie musiał się zalogować, zresetować hasło lub podać kod uwierzytelniania wieloskładnikowego lub jeśli będziemy musieli zapytać użytkownika, czy chciałby, aby jego urządzenie zostało zapamiętane. W naszym przykładzie wystarczy zaimplementować metody startPasswordAuthentication i startNewPasswordRequired :

 extension AppDelegate: AWSCognitoIdentityInteractiveAuthenticationDelegate { // This method is called when we need to log into the application. // It will grab the view controller from the storyboard and present it. func startPasswordAuthentication() -> AWSCognitoIdentityPasswordAuthentication { if(self.navigationController == nil) { self.navigationController = self.window?.rootViewController as? UINavigationController } if(self.loginViewController == nil) { self.loginViewController = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController } DispatchQueue.main.async { if(self.loginViewController!.isViewLoaded || self.loginViewController!.view.window == nil) { self.navigationController?.present(self.loginViewController!, animated: true, completion: nil) } } return self.loginViewController! } // This method is called when we need to reset a password. // It will grab the view controller from the storyboard and present it. func startNewPasswordRequired() -> AWSCognitoIdentityNewPasswordRequired { if (self.resetPasswordViewController == nil) { self.resetPasswordViewController = self.storyboard?.instantiateViewController(withIdentifier: "ResetPasswordController") as? ResetPasswordViewController } DispatchQueue.main.async { if(self.resetPasswordViewController!.isViewLoaded || self.resetPasswordViewController!.view.window == nil) { self.navigationController?.present(self.resetPasswordViewController!, animated: true, completion: nil) } } return self.resetPasswordViewController! } }

Należy zauważyć, że obie te metody zwracają kontroler widoku, który implementuje określony protokół. Na przykład LoginViewController implementuje AWSCognitoIdentityPasswordAuthentication , który ma pojedynczą metodę, która jest wywoływana z parametrami potrzebnymi do umożliwienia użytkownikowi ukończenia procesu logowania.

Proces uwierzytelniania

Gdy wszystkie te elementy znajdują się w aplikacji demonstracyjnej, możesz teraz zobaczyć, jak proces logowania przebiega od początku do końca. Główny widok aplikacji pokazuje nazwę użytkownika oraz imię i nazwisko użytkownika. Aby tak się stało, wykonaj następujące kroki:

  1. W AppViewController wywołujemy metodę fetchUserAttributes w metodzie viewDidLoad . Jeśli użytkownik nie jest zalogowany, uruchomi się proces logowania.
  2. Metoda startPasswordAuthentication w AppDelegate zostanie wyzwolona. Ta metoda ładuje LoginViewController i przedstawia go.
  3. Metoda getDetails LoginViewController jest wywoływana przez AWS SDK. Obejmuje to obiekt będący instancją AWSTaskCompletionSource , którego możemy użyć, aby umożliwić użytkownikowi próbę zalogowania się.
  4. Gdy użytkownik naciśnie przycisk „Zaloguj się”, przekazujemy dane logowania do tego obiektu. Spowoduje to wywołanie metody didCompleteStepWithError i będziemy mogli odpowiednio obsłużyć wynik. Jeśli nie ma błędu, możemy odrzucić kontroler widoku.
  5. Jeśli stworzyliśmy użytkownika w konsoli, będziemy mieli tutaj kolejny krok do wykonania. Ponieważ daliśmy użytkownikowi tymczasowe hasło, będzie musiał ustawić bardziej trwałe. Dodatkowo, ponieważ ustawiliśmy imię i nazwisko jako wymagane parametry, musimy zezwolić użytkownikowi na ich wprowadzenie. Zestaw AWS SDK wykryje to i wywoła metodę startNewPasswordRequired w AppDelegate . Spowoduje to wyświetlenie ResetPasswordViewController i ustawienie jego wystąpienia AWSTaskCompletionSource .
  6. ResetPasswordViewController działa prawie identycznie jak LoginViewController . Wystarczy poprosić użytkownika o prawidłowe wartości, a następnie przesłać te wartości. Po pomyślnym zakończeniu tego procesu zamykamy kontroler widoku.
  7. Po zakończeniu całego procesu logowania, SDK bezpiecznie przechowa tokeny zwrócone przez Cognito. Następnie w końcu pobierzemy dane użytkownika i możemy ich użyć do wypełnienia AppViewController nazwą użytkownika, imieniem i nazwiskiem.

Działająca aplikacja z uwierzytelnianiem działa
Działająca przykładowa aplikacja, pokazująca nazwę użytkownika i metadane

Wniosek

Chociaż proces konfiguracji puli użytkowników może składać się z kilku kroków, nawigacja po tych krokach jest łatwa. Ponadto ilość możliwych konfiguracji powinna dawać pewność, że może obsłużyć większość przypadków użycia. W mojej codziennej pracy w Universal Mind pracowałem z kilkoma klientami, którzy przenoszą swoje istniejące aplikacje, aby wykorzystać możliwości oferowane przez Cognito do zarządzania użytkownikami.

Niezależnie od tego, czy potrzebujesz regularnie wdrażać system zarządzania użytkownikami, jest to narzędzie, które każdy programista mobilny i webowy powinien mieć w swoim zestawie narzędzi . W następnym artykule z tej serii zaczniemy nieco bardziej badać możliwości Cognito, wdrażając bardziej w pełni funkcjonalną aplikację demonstracyjną, która implementuje więcej typowych przypadków użycia zarządzania użytkownikami.

Przy odrobinie praktyki możesz zaimponować wszystkim znajomym, konfigurując nową aplikację, która spełnia wszystkie te przypadki użycia zarządzania użytkownikami w ciągu jednego dnia. To całkiem nieźle jak na dzień pracy.

Linki i zasoby

  • Amazon Cognito
  • „Zasoby dla programistów”, Amazon Cognito
  • Mobilny pakiet SDK AWS
  • „Samouczek CocoaPods dla Swift: Pierwsze kroki”, Joshua Greene, raywenderlich.com