Otentikasi Pengguna Untuk Aplikasi Web Dan iOS Dengan AWS Cognito (Bagian 1)

Diterbitkan: 2022-03-10
Ringkasan cepat Pengembang dan organisasi sama-sama mencari cara untuk lebih gesit dengan solusi seluler. Ada keinginan untuk mengurangi waktu dari ide untuk menguji. Sebagai pengembang, saya sering menghadapi satu rintangan yang dapat memperlambat pembangunan awal hipotesis seluler: manajemen pengguna.

Selama bertahun-tahun, saya telah membangun setidaknya tiga sistem manajemen pengguna dari awal. Sebagian besar pendekatan dapat didasarkan pada boilerplate, tetapi selalu ada beberapa item utama yang perlu disesuaikan untuk klien tertentu. Ini cukup menjadi perhatian bahwa seluruh kategori manajemen pengguna, otentikasi dan layanan otorisasi bermunculan untuk memenuhi kebutuhan ini. Layanan seperti Auth0 memiliki seluruh solusi berdasarkan manajemen pengguna dan identitas yang dapat diintegrasikan dengan pengembang.

Salah satu layanan yang menyediakan fungsionalitas ini adalah Cognito Amazon Web Services (AWS'). Cognito adalah alat untuk memungkinkan pengguna mendaftar dan masuk ke aplikasi web dan seluler yang Anda buat. Selain fungsi ini, ini juga memungkinkan penyimpanan data pengguna secara offline, dan menyediakan sinkronisasi data ini. Seperti yang dinyatakan Amazon, “Dengan Amazon Cognito, Anda dapat fokus untuk menciptakan pengalaman aplikasi yang hebat daripada khawatir tentang membangun, mengamankan, dan menskalakan solusi untuk menangani manajemen pengguna, autentikasi, dan sinkronisasi di seluruh perangkat.”

Meremehkan Korsel

Korsel tidak pantas mendapatkan reputasi buruk yang mereka peroleh selama bertahun-tahun. Mereka terbukti sangat efektif dan tersedia dalam berbagai bentuk dan ukuran. Baca artikel terkait →

Tahun lalu, Amazon memperkenalkan tambahan layanan Cognito, kumpulan pengguna khusus. Fungsionalitas ini sekarang menyediakan apa yang saya dan pengembang lain butuhkan untuk memiliki sistem manajemen pengguna lintas platform yang lengkap, dapat disesuaikan, dengan fleksibilitas yang diperlukan agar sesuai dengan sebagian besar kasus penggunaan. Untuk memahami alasannya, kita perlu melihat sekilas apa itu manajemen pengguna dan masalah apa yang dipecahkannya.

Lebih banyak setelah melompat! Lanjutkan membaca di bawah ini
Kognito AWS
Diagram kumpulan pengguna kustom Cognito (Lihat versi besar)

Dalam artikel ini, kita akan menghabiskan sebagian besar waktu kita untuk menelusuri proses konfigurasi kumpulan pengguna untuk kebutuhan kita. Kemudian, kami akan mengintegrasikan kumpulan pengguna ini dengan aplikasi iOS dan memungkinkan pengguna untuk masuk dan mengambil atribut yang terkait dengan akun pengguna mereka. Pada akhirnya, kami akan memiliki aplikasi demo terbatas, tetapi aplikasi yang menangani inti dari manajemen pengguna. Selain itu, setelah ini ada, akan ada artikel lanjutan yang membahas ini sedikit lebih dalam.

Apa yang Kami Butuhkan Dari Manajemen Pengguna?

Jika Anda memiliki aplikasi seluler atau web, apa sebenarnya yang Anda butuhkan dalam hal pengelolaan pengguna? Meskipun login pengguna mungkin adalah hal pertama yang Anda pikirkan, kami tidak bisa berhenti di situ. Jika kita menginginkan sistem manajemen pengguna yang fleksibel yang akan berfungsi untuk sebagian besar kasus penggunaan web dan aplikasi seluler, sistem tersebut harus memiliki fungsi berikut:

  • login nama pengguna dan kata sandi;
  • hashing dan penyimpanan kata sandi yang aman;
  • perubahan kata sandi;
  • kebijakan dan validasi kata sandi;
  • pemicu siklus hidup pengguna (email selamat datang, email selamat tinggal, dll.);
  • atribut pengguna (nama depan, nama belakang, dll.);
  • konfigurasi yang diperlukan dan atribut opsional per pengguna;
  • penanganan kata sandi yang terlupakan;
  • validasi nomor telepon melalui SMS;
  • Verifikasi email;
  • Akses API ke titik akhir berdasarkan izin;
  • penyimpanan token akses yang aman di perangkat seluler;
  • penyimpanan offline atribut pengguna untuk perangkat seluler;
  • sinkronisasi atribut pengguna untuk status online dan offline;
  • otentikasi multi-faktor.

Sementara manajemen pengguna mungkin pada awalnya tampak seperti sistem masuk, fungsionalitasnya harus jauh melampaui itu agar sistem benar-benar cukup fleksibel untuk menangani sebagian besar kasus penggunaan. Ini jelas jauh lebih dari sekadar nama pengguna dan kata sandi.

Satu item tambahan perlu disebut di sini: keamanan. Salah satu persyaratan dari setiap sistem manajemen pengguna adalah bahwa hal itu perlu terus dievaluasi untuk keamanan sistem secara keseluruhan. Banyak sistem manajemen pengguna kustom memiliki kerentanan yang belum diperbaiki. Dalam setahun terakhir, telah terjadi pelanggaran keamanan sistem manajemen pengguna perusahaan seperti Dropbox, Dailymotion, Twitter dan Yahoo. Jika Anda memilih untuk membangun solusi khusus, Anda siap untuk mengamankan sistem Anda.

Masuk ke Amazon Cognito

Amazon Cognito adalah layanan terkelola yang memungkinkan Anda mengintegrasikan sistem manajemen pengguna yang fleksibel dan skalabel ke dalam aplikasi web dan seluler Anda. Cognito menyediakan dua cara berbeda untuk memanfaatkan layanan: identitas gabungan, yang memungkinkan untuk masuk melalui jejaring sosial seperti Facebook, dan kumpulan pengguna, yang memberi Anda kemampuan manajemen pengguna yang sepenuhnya disesuaikan untuk aplikasi atau rangkaian aplikasi tertentu.

Identitas gabungan sangat bagus jika Anda ingin pengguna dapat masuk dengan Facebook (atau Google, Amazon, dll.), tetapi ini berarti bahwa sebagian dari proses pengelolaan pengguna akan dialihkan ke Facebook. Meskipun ini mungkin dapat diterima dalam beberapa kasus, pengguna mungkin tidak ingin menghubungkan akun Facebook mereka ke aplikasi Anda. Selain itu, Anda mungkin ingin mengelola lebih banyak siklus hidup pengguna secara langsung, dan untuk ini, identitas gabungan tidak begitu fleksibel. Untuk tujuan artikel hari ini, kami akan fokus pada kumpulan pengguna karena mereka memberikan fleksibilitas yang dibutuhkan untuk platform manajemen pengguna yang kuat yang akan sesuai dengan sebagian besar kasus penggunaan. Dengan cara ini, Anda akan memiliki pendekatan yang dapat digunakan di sebagian besar proyek apa pun.

Karena ini adalah layanan AWS, ada manfaat lain menggunakan Cognito. Cognito dapat berintegrasi dengan API Gateway untuk menyediakan cara yang mudah untuk mengotorisasi akses API berdasarkan token yang dikembalikan dari login Cognito. Selain itu, jika Anda sudah memanfaatkan layanan AWS lain untuk aplikasi seluler Anda, Anda dapat menggunakan kumpulan pengguna Anda sebagai penyedia identitas untuk kredensial AWS Anda.

Seperti halnya layanan AWS lainnya, ada biaya yang terlibat. Harga untuk Cognito didasarkan pada pengguna aktif bulanan (MAU). Berita bagus untuk sebagian besar pengembang adalah bahwa ada tingkat gratis tidak terbatas yang dibatasi hingga 50.000 MAU saat menggunakan kumpulan pengguna khusus. Jika Anda memiliki aplikasi besar, ini akan memberi Anda sejumlah besar pengguna untuk menguji coba pendekatan baru dalam pengelolaan pengguna. Namun, saya menduga banyak dari Anda memiliki pengalaman yang tidak akan pernah melampaui 50.000 pengguna. Dalam hal ini, manajemen pengguna inti akan cukup gratis. Satu-satunya pengecualian untuk ini adalah layanan AWS lain yang akan Anda manfaatkan sebagai bagian dari proses manajemen pengguna, seperti Lambda, SNS, dan S3.

Membuat Kumpulan Pengguna

Langkah pertama dalam mengintegrasikan kumpulan pengguna ke dalam aplikasi seluler Anda adalah membuat kumpulan pengguna Cognito. Ini akan memberi kita nilai konfigurasi yang diperlukan untuk dihubungkan ke aplikasi contoh kita. Untuk membuat kumpulan pengguna baru, ikuti panduan yang disediakan di konsol Cognito Amazon.

Mari kita telusuri proses pembuatan kumpulan pengguna. Saya harus memperingatkan Anda bahwa ini adalah proses yang panjang. Dalam banyak hal, ini adalah hal yang baik karena menunjukkan area fleksibilitas. Namun, Anda pasti ingin mengambil secangkir kopi dan bekerja keras untuk yang satu ini.

1. Nama

Langkah awal dalam membuat kumpulan pengguna melibatkan pengaturan nama untuk kumpulan pengguna Anda dan memilih pendekatan yang akan Anda ambil untuk membuat kumpulan pengguna. Anda dapat meninjau default atau "melangkah melalui" pengaturan. Karena kami ingin memiliki pengetahuan kerja yang baik tentang bagaimana kumpulan pengguna dikonfigurasi, pilih opsi "Langkah melalui pengaturan."

Langkah 1 dalam Pembuatan Kumpulan Pengguna
Langkah awal dalam membuat kumpulan pengguna (Lihat versi besar)

2. Atribut

Mengonfigurasi atribut akan membutuhkan sedikit pemikiran. Untuk setiap kumpulan pengguna, Anda perlu menentukan atribut mana yang akan disimpan dalam sistem dan mana yang diperlukan. Karena sistem akan menerapkan nilai yang diperlukan, Anda tidak dapat mengubahnya nanti. Pendekatan terbaik di sini adalah untuk menandai hanya nilai-nilai yang benar-benar penting di sini seperti yang diperlukan. Selain itu, jika Anda ingin pengguna dapat masuk dengan alamat email mereka, pastikan untuk menandainya sebagai alias.

Jika Anda ingin memasukkan nilai khusus, Anda juga harus melakukannya di sini. Setiap nilai kustom akan memiliki tipe, aturan validasi opsional, dan opsi untuk dapat berubah (dapat diubah) atau tidak dapat diubah (tidak dapat diubah). Ada batas keras 25 atribut khusus.

Akhirnya, poin perlu dibuat di sini tentang nama pengguna. Nilai nama pengguna untuk setiap pengguna tidak dapat diubah (tidak dapat diubah). Ini berarti, dalam banyak kasus, membuat nilai ini dihasilkan secara otomatis akan masuk akal. Inilah sebabnya mengapa nilai "nama pengguna pilihan" ada. Jika Anda ingin pengguna memiliki nilai nama pengguna yang dapat mereka edit, cukup tandai atribut "nama pengguna pilihan" sebagai alias. Jika Anda ingin pengguna masuk dengan alamat email mereka, pastikan untuk menandai atribut "email" sebagai wajib dan alias.

Untuk aplikasi demo kami, saya memilih untuk membuat "email", "nama yang diberikan" dan "nama keluarga".

Langkah 2 dalam Pembuatan Kumpulan Pengguna
Mengonfigurasi atribut pengguna untuk kumpulan pengguna (Lihat versi besar)

3. Kebijakan

Setelah mengonfigurasi atribut, Anda akan dapat mengonfigurasi kebijakan untuk akun tersebut. Kebijakan pertama yang harus dikonfigurasi adalah kebijakan kata sandi. Kebijakan ini memungkinkan Anda untuk mengonfigurasi panjang dan apakah Anda memerlukan angka, karakter khusus, huruf besar atau huruf kecil. Kebijakan ini akan diterapkan pada sandi yang dimasukkan pengguna serta sandi yang diberikan administrator kepada pengguna.

Kebijakan selanjutnya terkait dengan pendaftaran pengguna. Untuk aplikasi publik, Anda mungkin ingin mengizinkan pengguna untuk mendaftar sendiri. Namun, tergantung pada jenis aplikasinya, Anda mungkin ingin membatasi pendaftaran dan menjadikan sistem hanya untuk undangan. Selain itu, Anda harus mengonfigurasi seberapa cepat undangan ini akan kedaluwarsa jika tidak digunakan.

Untuk aplikasi demo kami, saya memilih untuk menggunakan nilai default saja, dengan pengecualian bahwa saya tidak ingin pengguna dapat mendaftar sendiri. Dengan nilai-nilai ini, kami dapat melanjutkan ke verifikasi.

Langkah 3 dalam Pembuatan Kumpulan Pengguna
Mengonfigurasi kebijakan untuk kumpulan pengguna (Lihat versi besar)

4. Verifikasi

Langkah verifikasi memungkinkan Anda untuk mengatur otentikasi multi-faktor, serta verifikasi email dan telepon. Meskipun fungsi ini relatif mudah disiapkan di konsol, perhatikan bahwa Anda perlu meminta peningkatan pengeluaran untuk AWS SNS jika Anda ingin memverifikasi nomor telepon atau menggunakan autentikasi multi-faktor.

Untuk aplikasi demo kami, saya memilih untuk menggunakan nilai default saja.

Langkah 4 dalam Pembuatan Kumpulan Pengguna
Mengonfigurasi verifikasi untuk kumpulan pengguna (Lihat versi besar)

5. Penyesuaian Pesan

Langkah ini memungkinkan Anda untuk menyesuaikan email dan pesan SMS yang akan dikirim oleh kumpulan pengguna Anda, serta alamat email "dari" dan "balas ke". Untuk tujuan aplikasi demo kami, saya akan meninggalkan nilai default di sini dan melanjutkan.

Langkah 5 dalam Pembuatan Kumpulan Pengguna
Mengonfigurasi pesan siklus hidup untuk kumpulan pengguna (Lihat versi besar)

6. Tag

Jika Anda baru mengenal AWS, Anda mungkin tidak perlu menentukan tag apa pun. Namun, jika organisasi Anda menggunakan AWS secara teratur, tag menyediakan cara untuk menganalisis pengeluaran dan menetapkan izin dengan IAM. Misalnya, beberapa organisasi menentukan tag per lingkungan (pengembangan, pementasan, produksi) dan berdasarkan proyek.

Apa pun yang Anda masukkan dalam langkah ini, itu tidak akan memengaruhi aplikasi demo kami.

Langkah 6 dalam Pembuatan Kumpulan Pengguna
Menambahkan tag untuk kumpulan pengguna (Lihat versi besar)

7. Perangkat

Langkah selanjutnya memungkinkan Anda untuk menentukan apakah kumpulan pengguna akan mengingat perangkat pengguna Anda. Ini adalah langkah keamanan tambahan yang memungkinkan Anda melihat perangkat apa yang digunakan akun tertentu untuk masuk. Ini memiliki nilai ekstra ketika Anda memanfaatkan otentikasi multi-faktor (MFA). Jika perangkat diingat, Anda dapat memilih untuk tidak meminta token MFA pada setiap login.

Untuk tujuan aplikasi demo, saya telah memilih untuk menyetel nilainya ke "Selalu."

Langkah 7 dalam Pembuatan Kumpulan Pengguna
Mengonfigurasi penanganan perangkat untuk kumpulan pengguna (Lihat versi besar)

8. Klien Aplikasi

Untuk setiap aplikasi yang ingin Anda gunakan kumpulan pengguna (seperti aplikasi iOS, aplikasi web, aplikasi Android, dll.), Anda harus membuat aplikasi. Namun, Anda dapat kembali dan membuat ini setelah kumpulan pengguna dibuat, jadi tidak perlu mendesak untuk menambahkan semua ini dulu.

Setiap aplikasi memiliki beberapa nilai yang dapat Anda konfigurasikan. Untuk aplikasi demo ini, kami akan memberi nama aplikasi dan kemudian meninggalkan nilai default. Selanjutnya, Anda dapat mengonfigurasi atribut pengguna mana yang dapat dibaca dan ditulis oleh setiap aplikasi.

Langkah 8 dalam Pembuatan Kumpulan Pengguna
Mengonfigurasi aplikasi klien untuk kumpulan pengguna (Lihat versi besar)

Anda dapat mengatur nilai mana pun yang Anda suka dalam langkah ini, selama alamat email, nama keluarga, dan nama yang diberikan semuanya dapat dibaca dan ditulis oleh aplikasi. Pastikan untuk mengklik opsi "Buat Klien Aplikasi" sebelum melanjutkan.

9. Pemicu

Dengan pemicu, Anda dapat menggunakan fungsi Lambda untuk sepenuhnya menyesuaikan proses siklus hidup pengguna. Misalnya, jika Anda hanya ingin pengguna dengan alamat email dari domain perusahaan Anda dapat mendaftar, Anda dapat menambahkan fungsi Lambda untuk pemicu "Pra-pendaftaran" untuk melakukan validasi ini dan menolak permintaan pendaftaran apa pun yang tidak lulus.

Untuk aplikasi demo kami, saya tidak akan menambahkan pemicu apa pun.

Langkah 9 dalam Pembuatan Kumpulan Pengguna
Mengonfigurasi pemicu untuk kumpulan pengguna (Lihat versi besar)

10. Ulasan

Saya menyadari bahwa ini mungkin tampak seperti proses yang panjang dan sulit. Namun perlu diingat bahwa setiap langkah dalam membuat kumpulan pengguna memiliki fleksibilitas yang memungkinkan solusi untuk menyesuaikan lebih banyak kasus penggunaan. Dan sekarang untuk berita yang telah Anda tunggu-tunggu: Ini adalah langkah terakhir.

Cukup tinjau pengaturan untuk memastikan Anda telah mengonfigurasinya dengan benar untuk aplikasi demo. Dari layar ini, Anda dapat kembali dan mengedit pengaturan sebelumnya. Setelah kumpulan pengguna dibuat, beberapa nilai konfigurasi (seperti atribut yang diperlukan) tidak dapat diubah.

Dengan kumpulan pengguna baru yang dibuat, Anda sekarang dapat melanjutkan untuk mengintegrasikannya dalam contoh aplikasi iOS menggunakan AWS SDK untuk iOS.

Langkah 10 dalam Pembuatan Kumpulan Pengguna
Tinjauan akhir kumpulan pengguna sebelum pembuatan (Lihat versi besar)

Menyiapkan Aplikasi iOS Anda Untuk Kumpulan Pengguna Anda

Saya telah membuat contoh aplikasi iOS yang terintegrasi dengan Cognito untuk memungkinkan pengguna masuk, keluar, memasukkan nama depan dan belakang mereka, dan mengatur kata sandi. Untuk demo awal ini, pendaftaran pengguna tidak disertakan, jadi saya telah menggunakan konsol Cognito untuk menambahkan pengguna baru untuk pengujian.

Kode untuk aplikasi ini dapat ditemukan di repositori GitHub saya.

Mengonfigurasi Dependensi

Aplikasi ini menggunakan CocoaPods untuk mengelola dependensi. Pada titik ini, satu-satunya dependensi adalah bagian spesifik dari AWS iOS SDK yang terkait dengan kumpulan pengguna Cognito.

(Deskripsi lengkap tentang CocoaPods berada di luar cakupan artikel ini, namun, sumber daya di situs web CocoaPods akan membantu Anda memulai dan menjalankannya, jika konsep ini baru bagi Anda.)

Isi Podfile untuk aplikasi ini dapat dilihat di bawah ini:

 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

Dengan asumsi bahwa CocoaPods diinstal pada mesin Anda, Anda dapat menjalankan pod install , dan dependensi yang diperlukan akan diinstal untuk Anda.

Konfigurasi Kumpulan Pengguna

Langkah selanjutnya adalah memasukkan nilai untuk kumpulan pengguna dan aplikasi klien Anda. Aplikasi demo dikonfigurasi untuk menggunakan file, CognitoApplication/CognitoConfig.plist , untuk menarik informasi ini. Empat nilai perlu didefinisikan:

  • region (tali)
    Ini adalah wilayah tempat Anda membuat kumpulan pengguna Anda. Ini harus berupa pengenal wilayah standar, seperti us-east-1 atau ap-southeast-1 .
  • poolId (string)
    Ini adalah ID kumpulan pengguna yang Anda buat.
  • clientId (string)
    Ini adalah clientId yang dikonfigurasi sebagai bagian dari aplikasi yang Anda lampirkan ke kumpulan pengguna.
  • clientSecret (string)
    Ini adalah clientSecret yang dikonfigurasi sebagai bagian dari aplikasi yang Anda lampirkan ke kumpulan pengguna.

Dengan file itu dan nilai yang tepat, aplikasi demo dapat diluncurkan. Jika ada pengecualian yang terjadi selama peluncuran, pastikan Anda telah menyertakan masing-masing dari empat nilai yang ditunjukkan di bawah ini dan bahwa file tersebut ditempatkan di direktori yang benar.

plist Konfigurasi di Xcode
Konfigurasi kumpulan pengguna di Xcode dengan file plist (Lihat versi besar)

Integrasi Delegasi Aplikasi

Inti dari integrasi dengan Amazon Cognito terjadi dalam AppDelegate aplikasi. Langkah pertama kami adalah memastikan bahwa kami telah menyiapkan logging dan telah terhubung ke kumpulan pengguna kami. Sebagai bagian dari proses itu, kami akan menetapkan AppDelegate kami sebagai delegasi kumpulan pengguna. Untuk contoh dasar ini, kita dapat menyimpan logika ini di dalam AppDelegate . Untuk proyek yang lebih besar, mungkin masuk akal untuk menangani ini di tempat lain.

 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 }

Setelah konfigurasi ini diterapkan, kita perlu mengonfigurasi metode delegasi untuk kumpulan pengguna. Protokol yang kami terapkan adalah AWSCognitoIdentityInteractiveAuthenticationDelegate . Delegasi ini akan dipanggil setiap kali pengguna perlu masuk, mengatur ulang kata sandi mereka atau memberikan kode otentikasi multi-faktor atau jika kami perlu menanyakan pengguna tentang apakah mereka ingin perangkat mereka diingat. Untuk contoh kita, kita hanya perlu mengimplementasikan metode startPasswordAuthentication dan 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! } }

Satu hal penting yang perlu diperhatikan adalah bahwa kedua metode ini mengembalikan pengontrol tampilan yang mengimplementasikan protokol tertentu. Misalnya, LoginViewController mengimplementasikan AWSCognitoIdentityPasswordAuthentication , yang memiliki satu metode yang dipanggil dengan parameter yang diperlukan untuk memungkinkan pengguna menyelesaikan proses masuk.

Alur Otentikasi

Dengan semua bagian ini ada di aplikasi demo, Anda sekarang dapat melihat proses masuk bekerja dari awal hingga akhir. Tampilan utama aplikasi menunjukkan nama pengguna dan nama depan dan nama belakang pengguna. Untuk membuat ini terjadi, langkah-langkah berikut terjadi:

  1. Di AppViewController , kita memanggil metode fetchUserAttributes dalam metode viewDidLoad . Jika pengguna tidak login, ini akan memicu proses login.
  2. Metode startPasswordAuthentication di AppDelegate akan dipicu. Metode ini memuat LoginViewController dan menyajikannya.
  3. Metode getDetails dari LoginViewController dipanggil oleh AWS SDK. Ini termasuk objek yang merupakan instance dari AWSTaskCompletionSource , yang dapat kita gunakan untuk memungkinkan pengguna mencoba masuk.
  4. Saat pengguna menekan tombol "Masuk", kami meneruskan kredensial masuk ke objek itu. Ini kemudian akan memanggil metode didCompleteStepWithError , dan kami dapat menangani hasilnya sesuai dengan itu. Jika tidak ada kesalahan, kita dapat mengabaikan pengontrol tampilan.
  5. Jika kami membuat pengguna di konsol, kami akan memiliki langkah lain untuk ditangani di sini. Karena kami memberi pengguna kata sandi sementara, mereka perlu menetapkan kata sandi yang lebih permanen. Selain itu, karena kami menetapkan nama yang diberikan dan nama keluarga sebagai parameter yang diperlukan, kami juga perlu mengizinkan pengguna untuk memasukkannya. AWS SDK akan mendeteksi ini dan memanggil metode startNewPasswordRequired di AppDelegate . Ini akan menampilkan ResetPasswordViewController dan mengatur instance AWSTaskCompletionSource .
  6. ResetPasswordViewController bekerja hampir identik dengan LoginViewController . Kami hanya perlu meminta pengguna untuk nilai yang benar dan kemudian mengirimkan nilai tersebut. Setelah proses ini berhasil diselesaikan, kami mengabaikan pengontrol tampilan.
  7. Setelah seluruh proses masuk selesai, SDK akan menyimpan token yang dikembalikan oleh Cognito dengan aman. Kemudian, kami akhirnya akan mengambil detail pengguna, dan kami dapat menggunakannya untuk mengisi AppViewController dengan nama pengguna, nama yang diberikan, dan nama keluarga pengguna.

Aplikasi yang berfungsi dengan otentikasi berfungsi
Aplikasi sampel yang berfungsi, menampilkan nama pengguna dan data meta

Kesimpulan

Meskipun proses penyiapan kumpulan pengguna mungkin memiliki beberapa langkah, langkah-langkah tersebut mudah dinavigasi. Selain itu, jumlah konfigurasi yang mungkin harus memberi Anda keyakinan bahwa itu dapat mendukung sebagian besar kasus penggunaan. Dalam pekerjaan harian saya di Universal Mind, saya telah bekerja dengan beberapa klien yang memindahkan aplikasi mereka yang sudah ada untuk meningkatkan kemampuan yang disediakan Cognito untuk manajemen pengguna.

Terlepas dari apakah Anda perlu menerapkan sistem manajemen pengguna secara teratur, ini adalah alat yang harus dimiliki setiap pengembang seluler dan web di kotak alat mereka . Pada artikel berikutnya dalam seri ini, kita akan mulai mengeksplorasi kemampuan Cognito sedikit lebih banyak dengan mengimplementasikan aplikasi demo berfitur lebih lengkap yang mengimplementasikan lebih banyak kasus penggunaan manajemen pengguna umum.

Dengan sedikit latihan, Anda dapat pergi dan mengesankan semua teman Anda dengan menyiapkan aplikasi baru yang memenuhi semua kasus penggunaan manajemen pengguna ini dalam sehari. Itu cukup bagus untuk pekerjaan sehari.

Tautan dan Sumber Daya

  • Amazon Cognito
  • “Sumber Daya Pengembang,” Amazon Cognito
  • SDK Seluler AWS
  • “Tutorial CocoaPods untuk Swift: Memulai,” Joshua Greene, raywenderlich.com