AWS Cognito ile Web ve iOS Uygulamaları İçin Kullanıcı Kimlik Doğrulaması (Bölüm 1)

Yayınlanan: 2022-03-10
Kısa özet ↬ Geliştiriciler ve kuruluşlar, mobil çözümlerle daha fazla çevikliğe sahip olmanın bir yolunu arıyor. Fikirden teste kadar geçen süreyi azaltma arzusu vardır. Bir geliştirici olarak, genellikle bir mobil hipotezin ilk oluşumunu yavaşlatabilecek bir engelle karşılaşıyorum: kullanıcı yönetimi.

Yıllar içinde sıfırdan en az üç kullanıcı yönetim sistemi kurdum. Yaklaşımın çoğu, bir standart temele dayanabilir, ancak her zaman belirli bir müşteri için özelleştirilmesi gereken birkaç anahtar öğe vardır. Bu, tüm bir kullanıcı yönetimi, kimlik doğrulama ve yetkilendirme hizmetleri kategorisinin bu ihtiyacı karşılamak için ortaya çıkması endişesi için yeterlidir. Auth0 gibi hizmetler, geliştiricilerin entegre edebileceği kullanıcı ve kimlik yönetimine dayalı tüm çözümlere sahiptir.

Bu işlevi sağlayan hizmetlerden biri Amazon Web Services' (AWS') Cognito'dur. Cognito, kullanıcıların oluşturduğunuz web ve mobil uygulamalara kaydolmalarını ve oturum açmalarını sağlayan bir araçtır. Bu işlevin yanı sıra kullanıcı verilerinin çevrimdışı olarak saklanmasına da olanak tanır ve bu verilerin senkronizasyonunu sağlar. Amazon'un belirttiği gibi, "Amazon Cognito ile, cihazlar arasında kullanıcı yönetimi, kimlik doğrulama ve eşitlemeyi yönetmek için bir çözüm oluşturma, güvenceye alma ve ölçeklendirme konusunda endişelenmek yerine harika uygulama deneyimleri oluşturmaya odaklanabilirsiniz."

Dönen Karuselleri Küçümseme

Carousels, yıllar boyunca kazandıkları kötü itibarı gerçekten hak etmiyor. Çok etkili olduklarını kanıtlayabilirler ve birçok şekil ve boyutta olabilirler. İlgili bir makaleyi okuyun →

Geçen yıl Amazon, Cognito hizmetine, özel kullanıcı havuzlarına bir ekleme yaptı. Bu işlevsellik, çoğu kullanım durumuna uyması için gereken esnekliğe sahip eksiksiz, özelleştirilebilir, platformlar arası bir kullanıcı yönetim sistemine sahip olmak için benim ve diğer geliştiricilerin ihtiyaç duyduğu şeyi sağlıyor. Nedenini anlamak için kullanıcı yönetiminin ne olduğuna ve hangi sorunları çözdüğüne hızlıca bakmamız gerekiyor.

Atlamadan sonra daha fazlası! Aşağıdan okumaya devam edin ↓
AWS Bilgisi
Cognito özel kullanıcı havuzu şeması (Geniş versiyonu görüntüleyin)

Bu yazıda, zamanımızın çoğunu ihtiyaçlarımız için bir kullanıcı havuzu yapılandırma sürecinden geçerek geçireceğiz. Ardından, bu kullanıcı havuzunu bir iOS uygulamasıyla entegre edeceğiz ve bir kullanıcının oturum açmasına ve kullanıcı hesabıyla ilişkili öznitelikleri getirmesine izin vereceğiz. Sonunda, sınırlı bir demo uygulamamız olacak, ancak bu, kullanıcı yönetiminin özünü idare eden bir uygulama. Ek olarak, bu yapıldıktan sonra, bunu biraz daha derinleştiren bir takip makalesi olacak.

Kullanıcı Yönetiminden Neye İhtiyacımız Var?

Bir mobil veya web uygulamanız varsa, kullanıcı yönetimi açısından tam olarak neye ihtiyacınız var? Kullanıcı girişi muhtemelen aklınıza gelen ilk şey olsa da, burada duramayız. Çoğu web ve mobil uygulama kullanım durumu için çalışacak esnek bir kullanıcı yönetim sistemi istiyorsak, aşağıdaki işlevlere sahip olması gerekir:

  • kullanıcı adı ve şifre girişi;
  • güvenli parola sağlama ve depolama;
  • şifre değişiklikleri;
  • şifre politikası ve doğrulama;
  • kullanıcı yaşam döngüsü tetikleyicileri (hoş geldiniz e-postası, hoşçakal e-postası vb.);
  • kullanıcı özellikleri (ad, soyadı, vb.);
  • kullanıcı başına gerekli yapılandırma ve isteğe bağlı özellikler;
  • unutulan şifrelerin işlenmesi;
  • SMS yoluyla telefon numarası doğrulama;
  • Eposta Doğrulama;
  • İzinlere dayalı olarak uç noktalara API erişimi;
  • mobil cihazlarda erişim belirteçlerinin güvenli depolanması;
  • mobil cihazlar için kullanıcı özelliklerinin çevrimdışı depolanması;
  • çevrim içi ve çevrim dışı durumlar için kullanıcı özniteliklerinin senkronizasyonu;
  • çok faktörlü kimlik doğrulama

Kullanıcı yönetimi ilk başta bir oturum açma sistemi gibi görünse de, sistemin çoğu kullanım durumunu ele alacak kadar gerçekten esnek olması için işlevsellik bunun çok ötesine geçmelidir. Bu açıkça bir kullanıcı adı ve şifrenin çok ötesine geçiyor.

Burada ek bir öğenin çağrılması gerekiyor: güvenlik. Herhangi bir kullanıcı yönetim sisteminin gereksinimlerinden biri, sistemin bir bütün olarak güvenliği için sürekli olarak değerlendirilmesi gerektiğidir. Birçok özel kullanıcı yönetim sistemi, henüz düzeltilmemiş güvenlik açıklarına sahiptir. Geçtiğimiz yıl içerisinde Dropbox, Dailymotion, Twitter ve Yahoo gibi şirketlerin kullanıcı yönetim sistemlerinde güvenlik ihlalleri yaşandı. Özel bir çözüm oluşturmayı seçerseniz, sisteminizi güvence altına almak için uğraşırsınız.

Amazon Cognito'ya girin

Amazon Cognito, esnek ve ölçeklenebilir bir kullanıcı yönetim sistemini web ve mobil uygulamalarınıza entegre etmenizi sağlayan yönetilen bir hizmettir. Cognito, hizmeti kullanmanın iki farklı yolunu sunar: Facebook gibi sosyal ağlar aracılığıyla oturum açmaya izin veren birleşik kimlikler ve belirli bir uygulama veya uygulama grubu için size tamamen özel kullanıcı yönetimi yetenekleri sağlayan kullanıcı havuzları.

Kullanıcıların Facebook (veya Google, Amazon, vb.) ile giriş yapabilmesini istiyorsanız, birleşik kimlikler harikadır, ancak bu, kullanıcı yönetim sürecinin bir kısmının Facebook'a dış kaynak kullanımıyla sağlanacağı anlamına gelir. Bu, bazı durumlarda kabul edilebilir olsa da, kullanıcılar Facebook hesaplarını uygulamanıza bağlamak istemeyebilir. Ek olarak, kullanıcının yaşam döngüsünün daha fazlasını doğrudan yönetmek isteyebilirsiniz ve bunun için birleşik kimlikler o kadar esnek değildir. Bugünün makalesinin amacı doğrultusunda, her türlü kullanım durumuna uyan sağlam bir kullanıcı yönetimi platformu için gereken esnekliği sağladıkları için kullanıcı havuzlarına odaklanacağız. Bu şekilde, herhangi bir projede kullanılabilecek bir yaklaşıma sahip olacaksınız.

Bu bir AWS hizmeti olduğundan, Cognito kullanmanın başka faydaları da vardır. Cognito, bir Cognito oturum açma işleminden döndürülen belirteçlere dayalı olarak API erişimini yetkilendirmenin zahmetsiz bir yolunu sağlamak için API Ağ Geçidi ile entegre olabilir. Ayrıca, mobil uygulamanız için halihazırda başka AWS hizmetlerinden yararlanıyorsanız, kullanıcı havuzunuzu AWS kimlik bilgileriniz için bir kimlik sağlayıcı olarak kullanabilirsiniz.

Diğer tüm AWS hizmetlerinde olduğu gibi bunun da bir maliyeti vardır. Cognito için fiyatlandırma, aylık aktif kullanıcılara (MAU'lar) bağlıdır. Çoğu geliştirici için harika bir haber, özel bir kullanıcı havuzu kullanılırken 50.000 MAU ile sınırlanan sınırsız bir ücretsiz katman olmasıdır. Büyük bir uygulamanız varsa, bu size kullanıcı yönetimine yeni bir yaklaşım denemeniz için çok sayıda kullanıcı sağlayacaktır. Ancak, çoğunuzun 50.000 kullanıcıyı asla aşamayacak deneyimlere sahip olduğundan şüpheleniyorum. Bu durumda, çekirdek kullanıcı yönetimi hemen hemen ücretsiz olacaktır. Bunun tek istisnası, Lambda, SNS ve S3 gibi kullanıcı yönetimi sürecinin bir parçası olarak yararlanacağınız diğer AWS hizmetleridir.

Kullanıcı Havuzu Oluşturma

Bir kullanıcı havuzunu mobil uygulamanıza entegre etmenin ilk adımı, bir Cognito kullanıcı havuzu oluşturmaktır. Bu bize örnek uygulamamıza eklemek için gereken yapılandırma değerlerini verecektir. Yeni bir kullanıcı havuzu oluşturmak için Amazon'un Cognito konsolunda sağlanan sihirbazı gözden geçirin.

Şimdi bir kullanıcı havuzu oluşturma sürecini inceleyelim. Bunun uzun bir süreç olduğu konusunda sizi uyarmalıyım. Birçok yönden bu iyi bir şey çünkü esneklik alanlarını gösteriyor. Ancak, bir fincan kahve kapmak ve bunun için tokalaşmak isteyeceksiniz.

1. İsim

Bir kullanıcı havuzu oluşturmanın ilk adımı, kullanıcı havuzunuz için bir ad belirlemeyi ve kullanıcı havuzunu oluşturmak için izleyeceğiniz yaklaşımı seçmeyi içerir. Varsayılanları gözden geçirebilir veya ayarları "adım atabilirsiniz". Kullanıcı havuzunun nasıl yapılandırıldığına dair iyi bir çalışma bilgisine sahip olmak istediğimizden, "Ayarlarda adım adım" seçeneğini seçin.

Kullanıcı Havuzu Oluşturmada 1. Adım
Bir kullanıcı havuzu oluşturmanın ilk adımı (Büyük sürümü görüntüleyin)

2. Nitelikler

Nitelikleri yapılandırmak biraz düşünmeyi gerektirecektir. Her kullanıcı havuzu için, sistemde hangi özniteliklerin depolanacağını ve hangilerinin gerekli olduğunu belirlemeniz gerekecektir. Sistem gerekli değerleri zorlayacağından, bunu ileride değiştiremezsiniz. Buradaki en iyi yaklaşım, burada yalnızca gerçekten gerekli değerleri gerektiği gibi işaretlemektir. Ayrıca, kullanıcıların e-posta adresleriyle giriş yapabilmelerini istiyorsanız, bunu takma ad olarak işaretlediğinizden emin olun.

Özel değerler eklemek istiyorsanız, bunu burada da yapmanız gerekir. Her özel değerin bir türü, isteğe bağlı doğrulama kuralları ve değiştirilebilir (değiştirilebilir) veya değiştirilemez (değiştirilemez) olma seçeneği olacaktır. 25 özel öznitelik için kesin bir sınır vardır.

Son olarak, burada kullanıcı adları hakkında bir noktaya değinmek gerekiyor. Her kullanıcı için kullanıcı adı değeri değişmezdir (değiştirilemez). Bu, çoğu durumda bu değeri otomatik olarak oluşturmanın mantıklı olacağı anlamına gelir. Bu nedenle “tercih edilen kullanıcı adı” değeri vardır. Kullanıcıların düzenleyebilecekleri bir kullanıcı adı değerine sahip olmasını istiyorsanız, "tercih edilen kullanıcı adı" özelliğini takma ad olarak işaretlemeniz yeterlidir. Kullanıcıların yalnızca e-posta adresleriyle oturum açmasını istiyorsanız, "e-posta" özelliğini hem gerekli hem de bir takma ad olarak işaretlediğinizden emin olun.

Demo uygulamamız için “e-posta”, “verilen isim” ve “aile adı”nı zorunlu hale getirdim.

Kullanıcı Havuzu Oluşturmada 2. Adım
Kullanıcı havuzu için kullanıcı özniteliklerini yapılandırma (Geniş sürümü görüntüleyin)

3. Politikalar

Nitelikleri yapılandırdıktan sonra, hesap için ilkeleri yapılandırabileceksiniz. Yapılandırılacak ilk ilke, parola ilkesidir. Politika, hem uzunluğu hem de sayı, özel karakter, büyük harf veya küçük harf gerekip gerekmediğini yapılandırmanıza olanak tanır. Bu politika, hem kullanıcıların girdiği şifreler hem de yöneticilerin kullanıcılara atadığı şifreler için uygulanacaktır.

Sonraki politikalar, kullanıcı kaydıyla ilgilidir. Herkese açık bir uygulama için, büyük olasılıkla kullanıcıların kendilerinin kaydolmasına izin vermek isteyeceksiniz. Ancak, uygulamanın türüne bağlı olarak, kayıt işlemini kısıtlamak ve sistemin yalnızca davetiyeye açık olmasını isteyebilirsiniz. Ayrıca, kullanılmadıkları takdirde bu davetlerin süresinin ne kadar çabuk biteceğini yapılandırmanız gerekecektir.

Demo uygulamamız için, kullanıcıların kendi başlarına kaydolmalarını istemediğim istisna dışında, yalnızca varsayılan değerleri kullanmayı seçtim. Bu değerler yerinde olduğunda, doğrulamalara geçebiliriz.

Kullanıcı Havuzu Oluşturmada 3. Adım
Kullanıcı havuzu için politikaları yapılandırma (Büyük sürümü görüntüleyin)

4. Doğrulamalar

Doğrulamalar adımı, çok faktörlü kimlik doğrulamanın yanı sıra e-posta ve telefon doğrulaması ayarlamanıza olanak tanır. Bu işlevin konsolda ayarlanması nispeten kolay olsa da, telefon numaralarını doğrulamak veya çok faktörlü kimlik doğrulama kullanmak istiyorsanız AWS SNS için bir harcama artışı talep etmeniz gerekeceğini unutmayın.

Demo uygulamamız için sadece varsayılan değerleri kullanmayı seçtim.

Kullanıcı Havuzu Oluşturmada 4. Adım
Kullanıcı havuzu için doğrulamaları yapılandırma (Büyük sürümü görüntüleyin)

5. Mesaj Özelleştirmeleri

Bu adım, kullanıcı havuzunuzun göndereceği e-posta ve SMS mesajlarının yanı sıra "gönderen" ve "yanıtla" e-posta adreslerini özelleştirmenize olanak tanır. Demo uygulamamız için varsayılan değerleri burada bırakıp devam edeceğim.

Kullanıcı Havuzu Oluşturmada Adım 5
Kullanıcı havuzu için yaşam döngüsü mesajlarını yapılandırma (Büyük sürümü görüntüleyin)

6. Etiketler

AWS'de yeniyseniz herhangi bir etiket belirtmeniz gerekmeyebilir. Ancak, kuruluşunuzun AWS'yi düzenli olarak kullanması durumunda etiketler, IAM ile harcamaları analiz etmek ve izinleri atamak için bir yol sağlar. Örneğin, bazı kuruluşlar, ortam (geliştirme, evreleme, üretim) ve projeye göre etiketler belirtir.

Bu adımda ne girerseniz girin demo uygulamamızı etkilemeyecektir.

Kullanıcı Havuzu Oluşturmada 6. Adım
Kullanıcı havuzu için etiket ekleme (Geniş versiyonu görüntüleyin)

7. Cihazlar

Sonraki adım, kullanıcı havuzunun kullanıcınızın cihazlarını hatırlayıp hatırlamayacağını belirlemenize olanak tanır. Bu, belirli bir hesabın hangi cihazlarda oturum açtığını görmenizi sağlayan ek bir güvenlik adımıdır. Bu, çok faktörlü kimlik doğrulamadan (MFA) yararlanırken ekstra bir değere sahiptir. Cihaz hatırlanırsa, her oturum açma işleminde MFA belirteci gerektirmemeyi seçebilirsiniz.

Demo uygulamasının amacı için değeri “Her Zaman” olarak ayarlamayı seçtim.

Kullanıcı Havuzu Oluşturmada 7. Adım
Kullanıcı havuzu için cihaz işlemeyi yapılandırma (Büyük sürümü görüntüleyin)

8. Uygulama İstemcileri

Kullanıcı havuzunu kullanmak istediğiniz her uygulama için (iOS uygulaması, web uygulaması, Android uygulaması vb.) bir uygulama oluşturmalısınız. Ancak, kullanıcı havuzu oluşturulduktan sonra geri gelip bunları oluşturabilirsiniz, bu nedenle bunların tümünü henüz eklemenize gerek yoktur.

Her uygulamanın yapılandırabileceğiniz birkaç değeri vardır. Bu demo uygulaması için uygulamaya bir isim vereceğiz ve ardından varsayılan değerleri bırakacağız. Ardından, her uygulamanın hangi kullanıcı özniteliklerini okuyup yazabileceğini yapılandırabilirsiniz.

Kullanıcı Havuzu Oluşturmada 8. Adım
Kullanıcı havuzu için istemci uygulamalarını yapılandırma (Geniş sürümü görüntüleyin)

E-posta adresi, soyadı ve verilen ad tamamen uygulama tarafından okunabilir ve yazılabilir olduğu sürece, bu adımda istediğiniz değerleri ayarlayabilirsiniz. Devam etmeden önce "Uygulama İstemcisi Oluştur" seçeneğini tıkladığınızdan emin olun.

9. Tetikleyiciler

Tetikleyicilerle, kullanıcı yaşam döngüsü sürecini tamamen özelleştirmek için Lambda işlevlerini kullanabilirsiniz. Örneğin, yalnızca şirketinizin etki alanından bir e-posta adresine sahip kullanıcıların kaydolabilmesini istiyorsanız, bu doğrulamayı gerçekleştirmek için "Ön kayıt" tetikleyicisi için bir Lambda işlevi ekleyebilir ve herhangi bir kayıt isteğini reddedebilirsiniz. geçmez.

Demo uygulamamız için herhangi bir tetikleyici eklemeyeceğim.

Kullanıcı Havuzu Oluşturmada Adım 9
Kullanıcı havuzu için tetikleyicileri yapılandırma (Büyük sürümü görüntüleyin)

10. Gözden Geçirme

Bunun uzun ve zorlu bir süreç gibi görünebileceğinin farkındayım. Ancak, bir kullanıcı havuzu oluşturmanın her adımının, çözümün daha fazla kullanım durumuna uymasını sağlayan esnekliğe sahip olduğunu unutmayın. Ve şimdi duymayı beklediğiniz haberler için: Bu son adım.

Demo uygulaması için bunları doğru şekilde yapılandırdığınızdan emin olmak için ayarları gözden geçirmeniz yeterlidir. Bu ekrandan geri dönebilir ve önceki ayarlardan herhangi birini düzenleyebilirsiniz. Kullanıcı havuzu oluşturulduktan sonra bazı yapılandırma değerleri (gerekli öznitelikler gibi) değiştirilemez.

Oluşturduğunuz yeni kullanıcı havuzuyla, artık bunları iOS için AWS SDK'yı kullanarak örnek bir iOS uygulamasına entegre etmeye devam edebilirsiniz.

Kullanıcı Havuzu Oluşturmada Adım 10
Oluşturmadan önce kullanıcı havuzunun son incelemesi (Büyük sürümü görüntüleyin)

Kullanıcı Havuzunuz İçin iOS Uygulamanızı Ayarlama

Kullanıcının oturum açmasına, oturumu kapatmasına, adını ve soyadını girmesine ve bir parola belirlemesine izin vermek için Cognito ile entegre olan örnek bir iOS uygulaması oluşturdum. Bu ilk demo için kullanıcı kaydı dahil değildir, bu yüzden test için yeni bir kullanıcı eklemek için Cognito'nun konsolunu kullandım.

Bu uygulamanın kodu GitHub depomda bulunabilir.

Bağımlılıkları Yapılandırma

Bu uygulama, bağımlılıkları yönetmek için CocoaPod'ları kullanır. Bu noktada, yalnızca bağımlılıklar, AWS iOS SDK'nın Cognito kullanıcı havuzlarıyla ilgili belirli parçalarıdır.

(CocoaPods'un tam açıklaması bu makalenin kapsamı dışındadır, ancak bu konsept sizin için yeniyse, CocoaPods'un web sitesindeki bir kaynak çalışmaya başlamanıza yardımcı olacaktır.)

Bu uygulama için Podfile içeriği aşağıda görülebilir:

 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

CocoaPods'un makinenizde kurulu olduğunu varsayarsak, sadece pod install komutunu çalıştırabilirsiniz ve gerekli bağımlılıklar sizin için yüklenecektir.

Kullanıcı Havuzu Yapılandırması

Sonraki adım, kullanıcı havuzunuz ve istemci uygulamanız için değerleri eklemektir. Demo uygulaması, bu bilgilerin CognitoApplication/CognitoConfig.plist dosyasını kullanmak üzere yapılandırılmıştır. Dört değerin tanımlanması gerekir:

  • region (dize)
    Bu, kullanıcı havuzunuzu oluşturduğunuz bölgedir. Bunun us-east-1 veya ap-southeast-1 1 gibi standart bölge tanımlayıcısı olması gerekir.
  • poolId (dize)
    Bu, oluşturduğunuz kullanıcı havuzunun kimliğidir.
  • clientId (dize)
    Bu, kullanıcı havuzuna eklediğiniz uygulamanın bir parçası olarak yapılandırılan clientId .
  • clientSecret (dize)
    Bu, kullanıcı havuzuna eklediğiniz uygulamanın bir parçası olarak yapılandırılan clientSecret .

Bu dosya ve yerinde uygun değerler ile demo uygulaması başlatılabilir. Başlatma sırasında herhangi bir istisna meydana gelirse, aşağıda gösterilen dört değerin her birini eklediğinizden ve dosyanın doğru dizine yerleştirildiğinden emin olun.

Xcode'da plist Yapılandırması
plist dosyasıyla Xcode'da kullanıcı havuzu yapılandırması (Geniş sürümü görüntüleyin)

Uygulama Temsilcisi Entegrasyonu

Amazon Cognito ile entegrasyonun özü, uygulamanın AppDelegate . İlk adımımız, günlük kaydı kurduğumuzdan ve kullanıcı havuzumuza bağlandığımızdan emin olmaktır. Bu sürecin bir parçası olarak, AppDelegate kullanıcı havuzunun temsilcisi olarak atayacağız. Bu temel örnek için bu mantığı AppDelegate içinde tutabiliriz. Daha büyük projeler için, bunu başka bir yerde ele almak mantıklı olabilir.

 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 }

Bu yapılandırma gerçekleştikten sonra, kullanıcı havuzu için temsilci yöntemlerini yapılandırmamız gerekiyor. Uyguladığımız protokol AWSCognitoIdentityInteractiveAuthenticationDelegate . Bu temsilci, kullanıcının oturum açması, parolasını sıfırlaması veya çok faktörlü bir kimlik doğrulama kodu sağlaması gerektiğinde veya kullanıcıya cihazının hatırlanmasını isteyip istemediğini sormamız gerektiğinde aranacaktır. Örneğimiz için yalnızca startPasswordAuthentication ve startNewPasswordRequired yöntemlerini uygulamamız gerekiyor:

 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! } }

Unutulmaması gereken önemli bir nokta, bu yöntemlerin her ikisinin de belirli bir protokolü uygulayan bir görünüm denetleyicisi döndürmesidir. Örneğin, LoginViewController , kullanıcının oturum açma işlemini tamamlamasını sağlamak için gereken parametrelerle çağrılan tek bir yönteme sahip AWSCognitoIdentityPasswordAuthentication uygular.

Kimlik Doğrulama Akışı

Demo uygulamasında tüm bu parçalar yerindeyken, artık oturum açma işleminin başından sonuna kadar çalıştığını görebilirsiniz. Uygulamanın ana görünümü, kullanıcının kullanıcı adını ve adını ve soyadını gösterir. Bunun gerçekleşmesi için aşağıdaki adımlar gerçekleşir:

  1. AppViewController içinde, viewDidLoad yönteminde fetchUserAttributes yöntemini çağırıyoruz. Kullanıcı oturum açmadıysa, bu oturum açma işlemini tetikleyecektir.
  2. AppDelegate startPasswordAuthentication yöntemi tetiklenecektir. Bu yöntem LoginViewController yükler ve sunar.
  3. LoginViewController getDetails yöntemi, AWS SDK tarafından çağrılır. Bu, kullanıcının oturum açmaya çalışmasına izin vermek için kullanabileceğimiz bir AWSTaskCompletionSource örneği olan bir nesneyi içerir.
  4. Kullanıcı “Giriş yap” butonuna bastığında, giriş bilgilerini o nesneye iletiyoruz. Bu daha sonra didCompleteStepWithError yöntemini çağırır ve sonucu buna göre işleyebiliriz. Hata yoksa, görünüm denetleyicisini kapatabiliriz.
  5. Kullanıcıyı konsolda oluşturduysak, burada ele almamız gereken bir adım daha olacak. Kullanıcıya geçici bir şifre verdiğimiz için daha kalıcı bir şifre belirlemeleri gerekecek. Ek olarak, verilen adı ve soyadını gerekli parametreler olarak ayarladığımız için kullanıcının bunları da girmesine izin vermemiz gerekiyor. AWS SDK bunu algılar ve AppDelegate içindeki startNewPasswordRequired yöntemini AppDelegate . Bu, ResetPasswordViewController'ı sunacak ve ResetPasswordViewController örneğini AWSTaskCompletionSource .
  6. ResetPasswordViewController , LoginViewController ile neredeyse aynı şekilde çalışır. Kullanıcıdan doğru değerleri sormamız ve ardından bu değerleri göndermemiz yeterlidir. Bu işlem başarıyla tamamlandığında, görünüm denetleyicisini kapatıyoruz.
  7. Tüm oturum açma işlemi tamamlandıktan sonra SDK, Cognito tarafından döndürülen belirteçleri güvenli bir şekilde depolayacaktır. Ardından, sonunda kullanıcı ayrıntılarını alacağız ve bunları, AppViewController kullanıcının kullanıcı adı, verilen ad ve soyadıyla doldurmak için kullanabiliriz.

Kimlik doğrulama çalışması ile çalışan uygulama
Kullanıcı adı ve meta verileri gösteren çalışan örnek uygulama

Çözüm

Kullanıcı havuzu kurulum sürecinin birkaç adımı olsa da, bu adımlarda gezinmek kolaydır. Ayrıca, mümkün olan yapılandırma miktarı, kullanım durumlarının çoğunu destekleyebileceği konusunda size güven vermelidir. Universal Mind'deki günlük işimde, Cognito'nun kullanıcı yönetimi için sağladığı yeteneklerden yararlanmak için mevcut uygulamalarını taşıyan birkaç müşteriyle çalıştım.

Düzenli olarak bir kullanıcı yönetim sistemi uygulamanız gerekip gerekmediğine bakılmaksızın, bu, her mobil ve web geliştiricisinin araç kutusunda bulunması gereken bir araçtır . Bu dizinin bir sonraki makalesinde, yaygın kullanıcı yönetimi kullanım durumlarının çoğunu uygulayan daha tam özellikli bir demo uygulaması uygulayarak Cognito'nun yeteneklerini biraz daha keşfetmeye başlayacağız.

Biraz pratik yaparak, bir gün içinde tüm bu kullanıcı yönetimi kullanım durumlarını karşılayan yeni bir uygulama kurarak tüm arkadaşlarınızı etkileyebilir ve etkileyebilirsiniz. Bu bir günlük iş için oldukça iyi.

Bağlantılar ve Kaynaklar

  • Amazon Cognito'su
  • "Geliştirici Kaynakları", Amazon Cognito
  • AWS Mobil SDK'sı
  • "Swift için CocoaPods Eğitimi: Başlarken," Joshua Greene, raywenderlich.com