การตรวจสอบสิทธิ์ผู้ใช้สำหรับเว็บและแอป iOS ด้วย AWS Cognito (ตอนที่ 1)

เผยแพร่แล้ว: 2022-03-10
สรุปโดยย่อ ↬ นักพัฒนาและองค์กรต่างกำลังมองหาวิธีที่จะทำให้มีความคล่องตัวมากขึ้นด้วยโซลูชันมือถือ มีความปรารถนาที่จะลดเวลาจากความคิดที่จะทดสอบ ในฐานะนักพัฒนา ฉันมักจะพบกับอุปสรรคที่อาจทำให้การสร้างสมมุติฐานเริ่มต้นของอุปกรณ์เคลื่อนที่ช้าลง นั่นคือ การจัดการผู้ใช้

ตลอดหลายปีที่ผ่านมา ฉันได้สร้างระบบการจัดการผู้ใช้อย่างน้อยสามระบบตั้งแต่เริ่มต้น แนวทางส่วนใหญ่สามารถอิงตามต้นแบบ แต่ก็มีบางรายการสำคัญที่ต้องปรับแต่งสำหรับลูกค้าเฉพาะรายอยู่เสมอ นี่ก็เพียงพอแล้วสำหรับความกังวลว่าบริการการจัดการผู้ใช้ การตรวจสอบสิทธิ์ และการอนุญาตทั้งหมวดได้ผุดขึ้นมาเพื่อตอบสนองความต้องการนี้ บริการต่างๆ เช่น Auth0 มีโซลูชันทั้งหมดตามการจัดการผู้ใช้และข้อมูลประจำตัวที่นักพัฒนาสามารถผสานรวมได้

บริการหนึ่งที่มีฟังก์ชันนี้คือ Cognito ของ Amazon Web Services (AWS') Cognito เป็นเครื่องมือที่ ช่วยให้ผู้ใช้สามารถลงทะเบียนและลงชื่อเข้าใช้เว็บและแอปพลิเคชันมือถือ ที่คุณสร้างขึ้น นอกจากฟังก์ชันการทำงานนี้แล้ว ยังช่วยให้จัดเก็บข้อมูลผู้ใช้แบบออฟไลน์ และมีการซิงโครไนซ์ข้อมูลนี้ด้วย ตามที่ Amazon ระบุไว้ “ด้วย Amazon Cognito คุณสามารถมุ่งเน้นที่การสร้างประสบการณ์แอพที่ยอดเยี่ยม แทนที่จะกังวลเกี่ยวกับการสร้าง การรักษาความปลอดภัย และการปรับขนาดโซลูชันเพื่อจัดการผู้ใช้ การตรวจสอบสิทธิ์ และการซิงค์ระหว่างอุปกรณ์”

ประเมินภาพหมุนต่ำไป

ม้าหมุนไม่สมควรได้รับชื่อเสียงแย่ๆ ที่พวกเขาได้รับตลอดหลายปีที่ผ่านมา พวกเขาสามารถพิสูจน์ได้ว่ามีประสิทธิภาพมากและมาในรูปทรงและขนาดต่างๆ อ่านบทความที่เกี่ยวข้อง →

ปีที่แล้ว Amazon ได้เพิ่มบริการ Cognito ซึ่งเป็นกลุ่มผู้ใช้ที่กำหนดเอง ฟังก์ชันการทำงานนี้มอบสิ่งที่ฉันและนักพัฒนาคนอื่นๆ ต้องการเพื่อให้มีระบบการจัดการผู้ใช้ข้ามแพลตฟอร์มที่สมบูรณ์ ปรับแต่งได้ และมีความยืดหยุ่นที่จำเป็นเพื่อให้เหมาะสมกับกรณีการใช้งานส่วนใหญ่ เพื่อให้เข้าใจถึงสาเหตุ เราต้อง ดูคร่าวๆ ว่าการจัดการผู้ใช้คือ อะไรและแก้ปัญหาอะไรได้บ้าง

เพิ่มเติมหลังกระโดด! อ่านต่อด้านล่าง↓
AWS Cognito
ไดอะแกรมพูลผู้ใช้แบบกำหนดเองของ Cognito (ดูเวอร์ชันขนาดใหญ่)

ในบทความนี้ เราจะใช้เวลาส่วนใหญ่ไปกับกระบวนการกำหนดค่ากลุ่มผู้ใช้ตามความต้องการของเรา จากนั้น เราจะรวมกลุ่มผู้ใช้นี้กับแอปพลิเคชัน iOS และอนุญาตให้ผู้ใช้เข้าสู่ระบบและดึงข้อมูลแอตทริบิวต์ที่เกี่ยวข้องกับบัญชีผู้ใช้ของตน ในตอนท้าย เราจะมีแอปพลิเคชันสาธิตที่จำกัด แต่มีแอปพลิเคชันที่จัดการแกนหลักของการจัดการผู้ใช้ นอกจากนี้ หลังจากนี้ ก็จะมีบทความติดตามผลที่เจาะลึกลงไปอีกเล็กน้อย

เราต้องการอะไรจากการจัดการผู้ใช้?

หากคุณมีแอปมือถือหรือเว็บ คุณต้องการอะไรในแง่ของการจัดการผู้ใช้ แม้ว่าการเข้าสู่ระบบของผู้ใช้อาจเป็นสิ่งแรกที่คุณนึกถึง แต่เราไม่สามารถหยุดเพียงแค่นั้น หากเราต้องการระบบการจัดการผู้ใช้ที่ยืดหยุ่นซึ่งใช้ได้กับกรณีการใช้งานเว็บและแอปบนอุปกรณ์เคลื่อนที่ส่วนใหญ่ ระบบจะต้องมีฟังก์ชันต่อไปนี้:

  • ชื่อผู้ใช้และรหัสผ่านเข้าสู่ระบบ;
  • การแฮชและการจัดเก็บรหัสผ่านที่ปลอดภัย
  • การเปลี่ยนรหัสผ่าน
  • นโยบายรหัสผ่านและการตรวจสอบความถูกต้อง
  • ทริกเกอร์วงจรชีวิตของผู้ใช้ (อีเมลต้อนรับ อีเมลบอกลา ฯลฯ)
  • คุณลักษณะของผู้ใช้ (ชื่อ นามสกุล ฯลฯ);
  • การกำหนดค่าที่จำเป็นและแอตทริบิวต์ทางเลือกต่อผู้ใช้
  • การจัดการรหัสผ่านที่ลืม
  • ตรวจสอบหมายเลขโทรศัพท์ผ่าน SMS;
  • การยืนยันอีเมล
  • การเข้าถึง API ไปยังปลายทางตามการอนุญาต
  • การจัดเก็บโทเค็นการเข้าถึงที่ปลอดภัยบนอุปกรณ์มือถือ
  • การจัดเก็บแอตทริบิวต์ผู้ใช้แบบออฟไลน์สำหรับอุปกรณ์มือถือ
  • การซิงโครไนซ์แอตทริบิวต์ผู้ใช้สำหรับสถานะออนไลน์และออฟไลน์
  • การพิสูจน์ตัวตนแบบหลายปัจจัย

แม้ว่าการจัดการผู้ใช้ในตอนแรกอาจดูเหมือนระบบเข้าสู่ระบบ แต่ฟังก์ชันการทำงานต้องไปไกลกว่านั้นเพื่อให้ระบบมีความยืดหยุ่นเพียงพอที่จะรองรับกรณีการใช้งานส่วนใหญ่ได้ สิ่งนี้ชัดเจนมากกว่าแค่ชื่อผู้ใช้และรหัสผ่าน

ต้องเรียกรายการเพิ่มเติมหนึ่งรายการที่นี่: ความปลอดภัย ข้อกำหนดประการหนึ่งของระบบการจัดการผู้ใช้คือต้องได้รับการประเมินอย่างต่อเนื่องเพื่อความปลอดภัยของระบบโดยรวม ระบบการจัดการผู้ใช้แบบกำหนดเองจำนวนมากมีช่องโหว่ที่ไม่ได้รับการแก้ไข ภายในปีที่ผ่านมา มีการละเมิดความปลอดภัยของระบบการจัดการผู้ใช้ของบริษัทต่างๆ เช่น Dropbox, Dailymotion, Twitter และ Yahoo หากคุณเลือกสร้างโซลูชันแบบกำหนดเอง คุณก็พร้อมสำหรับการรักษาความปลอดภัยระบบของคุณ

เข้าสู่ Amazon Cognito

Amazon Cognito เป็นบริการที่มีการจัดการที่ช่วยให้คุณสามารถผสานรวมระบบการจัดการผู้ใช้ที่ยืดหยุ่นและปรับขนาดได้เข้ากับเว็บและแอปพลิเคชันมือถือของคุณ Cognito นำเสนอวิธีที่แตกต่างกันสองวิธีในการใช้บริการ: ข้อมูลระบุตัวตนแบบรวมศูนย์ ซึ่งอนุญาตให้เข้าสู่ระบบผ่านเครือข่ายสังคมออนไลน์ เช่น Facebook และกลุ่มผู้ใช้ ซึ่งให้ความสามารถในการจัดการผู้ใช้ที่กำหนดเองได้อย่างสมบูรณ์สำหรับแอพหรือชุดแอปพลิเคชันเฉพาะ

ข้อมูลระบุตัวตนแบบรวมศูนย์นั้นยอดเยี่ยมหากคุณต้องการให้ผู้ใช้สามารถเข้าสู่ระบบด้วย Facebook (หรือ Google, Amazon เป็นต้น) แต่นี่หมายความว่าส่วนหนึ่งของกระบวนการจัดการผู้ใช้จะถูกเอาต์ซอร์ซไปยัง Facebook แม้ว่าสิ่งนี้อาจเป็นที่ยอมรับได้ในบางกรณี แต่ผู้ใช้อาจไม่ต้องการเชื่อมต่อบัญชี Facebook ของตนกับแอปพลิเคชันของคุณ นอกจากนี้ คุณอาจต้องการจัดการวงจรชีวิตของผู้ใช้ให้มากขึ้นโดยตรง และด้วยเหตุนี้ ข้อมูลประจำตัวที่ติดต่อกับภายนอกจึงไม่ยืดหยุ่นเท่าที่ควร สำหรับวัตถุประสงค์ของบทความในวันนี้ เราจะเน้นที่กลุ่มผู้ใช้ เนื่องจากมีความยืดหยุ่นที่จำเป็นสำหรับแพลตฟอร์มการจัดการผู้ใช้ที่มีประสิทธิภาพ ซึ่งเหมาะสมกับกรณีการใช้งานส่วนใหญ่ ด้วยวิธีนี้ คุณจะมีแนวทางที่สามารถนำไปใช้ในโครงการส่วนใหญ่ได้

เนื่องจากเป็นบริการของ AWS จึงมีประโยชน์อื่นๆ ของการใช้ Cognito Cognito สามารถผสานรวมกับ API Gateway เพื่อให้เป็นวิธีที่ไม่ยุ่งยากในการอนุญาตการเข้าถึง API ตามโทเค็นที่ส่งคืนจากการเข้าสู่ระบบ Cognito นอกจากนี้ หากคุณใช้ประโยชน์จากบริการอื่นๆ ของ AWS สำหรับแอปพลิเคชันมือถือของคุณอยู่แล้ว คุณสามารถใช้กลุ่มผู้ใช้เป็นผู้ให้บริการข้อมูลประจำตัวสำหรับข้อมูลประจำตัว AWS ของคุณได้

เช่นเดียวกับบริการอื่นๆ ของ AWS มีค่าใช้จ่ายที่เกี่ยวข้อง ราคาสำหรับ Cognito ขึ้นอยู่กับผู้ใช้งานรายเดือน (MAU) ข่าวดีสำหรับนักพัฒนาส่วนใหญ่คือ มีระดับฟรีไม่จำกัดที่จำกัดที่ 50,000 MAU เมื่อใช้กลุ่มผู้ใช้ที่กำหนดเอง หากคุณมีแอปพลิเคชั่นขนาดใหญ่ สิ่งนี้จะทำให้คุณมีผู้ใช้จำนวนมากที่จะนำร่องแนวทางใหม่ในการจัดการผู้ใช้ อย่างไรก็ตาม ฉันสงสัยว่าพวกคุณหลายคนมีประสบการณ์ที่จะไม่มีวันเกินผู้ใช้ 50,000 คน ในกรณีนี้ การจัดการผู้ใช้หลักจะค่อนข้างฟรี ข้อยกเว้นเพียงอย่างเดียวคือบริการอื่นๆ ของ AWS ที่คุณจะใช้ประโยชน์โดยเป็นส่วนหนึ่งของกระบวนการจัดการผู้ใช้ เช่น Lambda, SNS และ S3

การสร้างกลุ่มผู้ใช้

ขั้นตอนแรกในการรวมกลุ่มผู้ใช้เข้ากับแอปพลิเคชันมือถือของคุณคือการสร้างพูลผู้ใช้ Cognito ซึ่งจะทำให้เราได้รับค่าการกำหนดค่าที่จำเป็นในการเชื่อมต่อกับแอปพลิเคชันตัวอย่างของเรา ในการสร้างกลุ่มผู้ใช้ใหม่ ให้ดำเนินการตามวิซาร์ดที่มีให้ในคอนโซล Cognito ของ Amazon

มาดูขั้นตอนการสร้างกลุ่มผู้ใช้กัน ฉันต้องเตือนคุณว่านี่เป็นกระบวนการที่ยาวนาน ในหลาย ๆ ด้าน นี่เป็นสิ่งที่ดีเพราะแสดงให้เห็นพื้นที่ของความยืดหยุ่น อย่างไรก็ตาม คุณจะต้องการคว้ากาแฟสักถ้วยและลองดื่มกาแฟสักแก้ว

1. ชื่อ

ขั้นตอนแรกในการสร้างกลุ่มผู้ใช้เกี่ยวข้องกับการตั้งชื่อสำหรับกลุ่มผู้ใช้ของคุณ และเลือกวิธีการที่คุณจะใช้เพื่อสร้างกลุ่มผู้ใช้ คุณสามารถตรวจสอบค่าเริ่มต้นหรือ "ทำตามขั้นตอน" การตั้งค่าได้ เนื่องจากเราต้องการมีความรู้ที่ดีเกี่ยวกับวิธีการกำหนดค่าพูลผู้ใช้ ให้เลือกตัวเลือก "ขั้นตอนผ่านการตั้งค่า"

ขั้นตอนที่ 1 ในการสร้างกลุ่มผู้ใช้
ขั้นตอนแรกในการสร้างกลุ่มผู้ใช้ (ดูรุ่นใหญ่)

2. คุณสมบัติ

การกำหนดค่าแอตทริบิวต์จะต้องใช้ความคิดเล็กน้อย สำหรับแต่ละกลุ่มผู้ใช้ คุณจะต้องกำหนดว่าแอตทริบิวต์ใดจะถูกเก็บไว้ในระบบและแอตทริบิวต์ใดที่จำเป็น เนื่องจากระบบจะบังคับใช้ค่าที่จำเป็น คุณจึงไม่สามารถเปลี่ยนแปลงสิ่งนี้ได้ แนวทางที่ดีที่สุดคือการทำเครื่องหมายเฉพาะค่าที่จำเป็นอย่างแท้จริงที่นี่ตามที่ต้องการ นอกจากนี้ ถ้าคุณต้องการให้ผู้ใช้สามารถเข้าสู่ระบบด้วยที่อยู่อีเมลของพวกเขา ให้แน่ใจว่าได้ทำเครื่องหมายว่าเป็นนามแฝง

หากคุณต้องการรวมค่าที่กำหนดเอง คุณจะต้องดำเนินการที่นี่เช่นกัน ค่าที่กำหนดเองแต่ละค่าจะมีประเภท กฎการตรวจสอบที่ไม่บังคับ และตัวเลือกที่จะเปลี่ยนแปลงได้ (เปลี่ยนแปลงได้) หรือเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้) แอตทริบิวต์ที่กำหนดเองมีขีดจำกัดสูงสุด 25 รายการ

สุดท้ายนี้ จำเป็นต้องระบุประเด็นเกี่ยวกับชื่อผู้ใช้ ค่าชื่อผู้ใช้สำหรับผู้ใช้แต่ละรายจะไม่เปลี่ยนแปลง (ไม่สามารถเปลี่ยนแปลงได้) ซึ่งหมายความว่า ในกรณีส่วนใหญ่ การสร้างค่านี้โดยอัตโนมัติน่าจะสมเหตุสมผล นี่คือสาเหตุที่ค่า “ชื่อผู้ใช้ที่ต้องการ” มีอยู่ หากคุณต้องการให้ผู้ใช้มีค่าชื่อผู้ใช้ที่สามารถแก้ไขได้ เพียงทำเครื่องหมายแอตทริบิวต์ "ชื่อผู้ใช้ที่ต้องการ" เป็นชื่อแทน หากคุณต้องการให้ผู้ใช้เข้าสู่ระบบด้วยที่อยู่อีเมลเพียงอย่างเดียว ให้ทำเครื่องหมายแอตทริบิวต์ "อีเมล" เป็นทั้งที่จำเป็นและชื่อแทน

สำหรับแอปพลิเคชันสาธิตของเรา ฉันเลือกกำหนดให้ต้องใช้ "อีเมล" "ชื่อจริง" และ "นามสกุล"

ขั้นตอนที่ 2 ในการสร้างกลุ่มผู้ใช้
การกำหนดค่าแอ็ตทริบิวต์ผู้ใช้สำหรับพูลผู้ใช้ (ดูเวอร์ชันขนาดใหญ่)

3. นโยบาย

หลังจากกำหนดค่าแอตทริบิวต์แล้ว คุณจะสามารถกำหนดค่านโยบายสำหรับบัญชีได้ นโยบายแรกที่จะกำหนดค่าคือนโยบายรหัสผ่าน นโยบายนี้อนุญาตให้คุณกำหนดค่าทั้งความยาวและไม่ว่าคุณจะต้องการตัวเลข อักขระพิเศษ ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก นโยบายนี้จะบังคับใช้กับทั้งรหัสผ่านที่ผู้ใช้ป้อนและรหัสผ่านที่ผู้ดูแลระบบกำหนดให้กับผู้ใช้

นโยบายถัดไปเกี่ยวข้องกับการลงทะเบียนผู้ใช้ สำหรับแอปพลิเคชันสาธารณะ คุณอาจต้องการอนุญาตให้ผู้ใช้ลงทะเบียนด้วยตนเอง อย่างไรก็ตาม คุณอาจต้องการจำกัดการสมัครและกำหนดให้ระบบเป็นแบบเชิญเท่านั้น ทั้งนี้ขึ้นอยู่กับประเภทของแอปพลิเคชัน นอกจากนี้ คุณจะต้องกำหนดค่าว่าคำเชิญเหล่านี้จะหมดอายุเร็วแค่ไหนหากไม่ได้ใช้

สำหรับแอปพลิเคชันสาธิตของเรา ฉันเลือกใช้เฉพาะค่าเริ่มต้น ยกเว้นว่าฉันไม่ต้องการให้ผู้ใช้ลงทะเบียนด้วยตนเอง ด้วยค่าเหล่านี้ เราสามารถดำเนินการตรวจสอบได้

ขั้นตอนที่ 3 ในการสร้างกลุ่มผู้ใช้
การกำหนดค่านโยบายสำหรับกลุ่มผู้ใช้ (ดูเวอร์ชันขนาดใหญ่)

4. การยืนยัน

ขั้นตอนการตรวจสอบทำให้คุณสามารถตั้งค่าการตรวจสอบสิทธิ์แบบหลายปัจจัย รวมถึงการยืนยันอีเมลและโทรศัพท์ แม้ว่าฟังก์ชันนี้จะค่อนข้างง่ายต่อการตั้งค่าในคอนโซล แต่โปรดทราบว่าคุณจะต้องขอเพิ่มการใช้จ่ายสำหรับ AWS SNS หากคุณต้องการตรวจสอบหมายเลขโทรศัพท์หรือใช้การตรวจสอบสิทธิ์แบบหลายปัจจัย

สำหรับแอปพลิเคชันสาธิตของเรา ฉันเลือกใช้เฉพาะค่าเริ่มต้น

ขั้นตอนที่ 4 ในการสร้างกลุ่มผู้ใช้
การกำหนดค่าการตรวจสอบสำหรับกลุ่มผู้ใช้ (ดูเวอร์ชันขนาดใหญ่)

5. การปรับแต่งข้อความ

ขั้นตอนนี้ช่วยให้คุณปรับแต่งอีเมลและข้อความ SMS ที่กลุ่มผู้ใช้ของคุณจะส่ง รวมถึงที่อยู่อีเมล "จาก" และ "ตอบกลับ" สำหรับวัตถุประสงค์ของแอปพลิเคชันสาธิตของเรา ฉันจะปล่อยค่าเริ่มต้นไว้ที่นี่และดำเนินการต่อ

ขั้นตอนที่ 5 ในการสร้างกลุ่มผู้ใช้
การกำหนดค่าข้อความวงจรการใช้งานสำหรับกลุ่มผู้ใช้ (ดูเวอร์ชันขนาดใหญ่)

6. แท็ก

หากคุณเพิ่งเริ่มใช้ AWS คุณอาจไม่จำเป็นต้องระบุแท็กใดๆ อย่างไรก็ตาม ในกรณีที่องค์กรของคุณใช้ AWS เป็นประจำ แท็กจะให้วิธีวิเคราะห์การใช้จ่ายและกำหนดสิทธิ์กับ IAM ตัวอย่างเช่น บางองค์กรระบุแท็กตามสภาพแวดล้อม (การพัฒนา การจัดเตรียม การผลิต) และตามโครงการ

ไม่ว่าคุณจะป้อนอะไรในขั้นตอนนี้ จะไม่ส่งผลต่อแอปพลิเคชันสาธิตของเรา

ขั้นตอนที่ 6 ในการสร้างพูลผู้ใช้
การเพิ่มแท็กสำหรับกลุ่มผู้ใช้ (ดูเวอร์ชันขนาดใหญ่)

7. อุปกรณ์

ขั้นตอนต่อไปช่วยให้คุณกำหนดได้ว่ากลุ่มผู้ใช้จะจดจำอุปกรณ์ของผู้ใช้ของคุณหรือไม่ นี่เป็นขั้นตอนการรักษาความปลอดภัยเพิ่มเติมที่ช่วยให้คุณเห็นว่าอุปกรณ์ใดบ้างที่มีการเข้าสู่ระบบด้วยบัญชีเฉพาะ สิ่งนี้มีค่าพิเศษเมื่อคุณใช้ประโยชน์จากการรับรองความถูกต้องด้วยหลายปัจจัย (MFA) หากจำอุปกรณ์ได้ คุณสามารถเลือกไม่ต้องการโทเค็น MFA ในการเข้าสู่ระบบแต่ละครั้ง

สำหรับวัตถุประสงค์ของแอปพลิเคชันสาธิต ฉันได้เลือกที่จะตั้งค่าเป็น "เสมอ"

ขั้นตอนที่ 7 ในการสร้างกลุ่มผู้ใช้
การกำหนดค่าการจัดการอุปกรณ์สำหรับกลุ่มผู้ใช้ (ดูเวอร์ชันขนาดใหญ่)

8. ลูกค้าแอป

สำหรับแต่ละแอปพลิเคชันที่คุณต้องการใช้กลุ่มผู้ใช้ (เช่นแอปพลิเคชัน iOS, เว็บแอปพลิเคชัน, แอปพลิเคชัน Android เป็นต้น) คุณควรสร้างแอป อย่างไรก็ตาม คุณสามารถกลับมาสร้างสิ่งเหล่านี้ได้หลังจากสร้างพูลผู้ใช้แล้ว ดังนั้นจึงไม่จำเป็นต้องเพิ่มสิ่งเหล่านี้ทั้งหมด

แต่ละแอปพลิเคชันมีค่าต่างๆ ที่คุณสามารถกำหนดค่าได้ สำหรับแอปพลิเคชันสาธิตนี้ เราจะตั้งชื่อแอปแล้วปล่อยให้เป็นค่าเริ่มต้น ถัดไป คุณสามารถกำหนดค่าแอตทริบิวต์ผู้ใช้ที่แต่ละแอปสามารถอ่านและเขียนได้

ขั้นตอนที่ 8 ในการสร้างพูลผู้ใช้
การกำหนดค่าแอปพลิเคชันไคลเอนต์สำหรับพูลผู้ใช้ (ดูเวอร์ชันขนาดใหญ่)

คุณสามารถตั้งค่าใดก็ได้ที่คุณต้องการในขั้นตอนนี้ ตราบใดที่ที่อยู่อีเมล นามสกุล และชื่อที่ระบุนั้นทั้งหมดสามารถอ่านและเขียนได้โดยแอปพลิเคชัน อย่าลืมคลิกตัวเลือกเพื่อ "สร้างไคลเอ็นต์แอป" ก่อนดำเนินการต่อ

9. ทริกเกอร์

ด้วยทริกเกอร์ คุณสามารถใช้ฟังก์ชัน Lambda เพื่อปรับแต่งกระบวนการวงจรชีวิตของผู้ใช้ได้อย่างสมบูรณ์ ตัวอย่างเช่น หากคุณต้องการเฉพาะผู้ใช้ที่มีที่อยู่อีเมลจากโดเมนของบริษัทของคุณเท่านั้นที่สามารถลงทะเบียนได้ คุณสามารถเพิ่มฟังก์ชัน Lambda สำหรับทริกเกอร์ "การลงทะเบียนล่วงหน้า" เพื่อดำเนินการตรวจสอบนี้และปฏิเสธคำขอลงทะเบียนใดๆ ที่ ไม่ผ่าน

สำหรับแอปพลิเคชันสาธิตของเรา ฉันจะไม่เพิ่มทริกเกอร์ใดๆ

ขั้นตอนที่ 9 ในการสร้างพูลผู้ใช้
การกำหนดค่าทริกเกอร์สำหรับพูลผู้ใช้ (ดูเวอร์ชันขนาดใหญ่)

10. รีวิว

ฉันรู้ว่านี่อาจดูเหมือนเป็นกระบวนการที่ใช้เวลานานและลำบาก แต่โปรดจำไว้ว่าแต่ละขั้นตอนในการสร้างกลุ่มผู้ใช้มีความยืดหยุ่นที่ช่วยให้โซลูชันเหมาะสมกับกรณีการใช้งานมากขึ้น และสำหรับข่าวที่คุณรอคอย นี่คือขั้นตอนสุดท้าย

เพียงตรวจสอบการตั้งค่าเพื่อให้แน่ใจว่าคุณได้กำหนดค่าไว้อย่างถูกต้องสำหรับแอปพลิเคชันสาธิต จากหน้าจอนี้ คุณสามารถย้อนกลับและแก้ไขการตั้งค่าก่อนหน้านี้ได้ เมื่อสร้างพูลผู้ใช้แล้ว ค่าการกำหนดค่าบางอย่าง (เช่น แอตทริบิวต์ที่จำเป็น) จะไม่สามารถเปลี่ยนแปลงได้

ด้วยการสร้างกลุ่มผู้ใช้ใหม่ของคุณ ตอนนี้คุณสามารถดำเนินการรวมเข้ากับแอปพลิเคชัน iOS ตัวอย่างได้โดยใช้ AWS SDK สำหรับ iOS

ขั้นตอนที่ 10 ในการสร้างกลุ่มผู้ใช้
การตรวจสอบขั้นสุดท้ายของกลุ่มผู้ใช้ก่อนสร้าง (ดูเวอร์ชันขนาดใหญ่)

การตั้งค่าแอปพลิเคชัน iOS ของคุณสำหรับกลุ่มผู้ใช้ของคุณ

ฉันได้สร้างตัวอย่างแอปพลิเคชัน iOS ที่ผสานรวมกับ Cognito เพื่อให้ผู้ใช้สามารถเข้าสู่ระบบ ออกจากระบบ ป้อนชื่อและนามสกุล และตั้งรหัสผ่าน สำหรับการสาธิตครั้งแรกนี้ การลงทะเบียนผู้ใช้ไม่ได้รวมอยู่ด้วย ดังนั้นฉันจึงใช้คอนโซลของ Cognito เพื่อเพิ่มผู้ใช้ใหม่สำหรับการทดสอบ

รหัสสำหรับแอปพลิเคชันนี้สามารถพบได้ในที่เก็บ GitHub ของฉัน

การกำหนดค่าการพึ่งพา

แอปพลิเคชันนี้ใช้ CocoaPods เพื่อจัดการการพึ่งพา ณ จุดนี้ การขึ้นต่อกันเพียงอย่างเดียวคือส่วนเฉพาะของ AWS iOS SDK ที่เกี่ยวข้องกับกลุ่มผู้ใช้ Cognito

(คำอธิบายโดยละเอียดของ CocoaPods อยู่นอกเหนือขอบเขตของบทความนี้ อย่างไรก็ตาม แหล่งข้อมูลบนเว็บไซต์ของ CocoaPods จะช่วยให้คุณเริ่มต้นใช้งานได้ ในกรณีที่แนวคิดนี้ยังใหม่สำหรับคุณ)

เนื้อหาของ Podfile สำหรับแอปพลิเคชันนี้สามารถดูได้ด้านล่าง:

 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 บนเครื่องของคุณแล้ว คุณสามารถเรียกใช้ pod install และการติดตั้งการพึ่งพาที่จำเป็นให้กับคุณ

การกำหนดค่ากลุ่มผู้ใช้

ขั้นตอนต่อไปคือการรวมค่าสำหรับกลุ่มผู้ใช้และแอปพลิเคชันไคลเอนต์ของคุณ แอปพลิเคชันสาธิตได้รับการกำหนดค่าให้ใช้ไฟล์ CognitoApplication/CognitoConfig.plist เพื่อดึงข้อมูลนี้ ต้องกำหนดค่าสี่ค่า:

  • region (สตริง)
    นี่คือภูมิภาคที่คุณสร้างกลุ่มผู้ใช้ของคุณ สิ่งนี้จะต้องเป็นตัวระบุภูมิภาคมาตรฐาน เช่น us-east-1 หรือ ap-southeast-1
  • poolId (สตริง)
    นี่คือ ID ของกลุ่มผู้ใช้ที่คุณสร้างขึ้น
  • clientId (สตริง)
    นี่คือ clientId ที่กำหนดค่าให้เป็นส่วนหนึ่งของแอพที่คุณแนบกับกลุ่มผู้ใช้
  • clientSecret (สตริง)
    นี่คือ clientSecret ที่ได้รับการกำหนดค่าให้เป็นส่วนหนึ่งของแอปที่คุณแนบกับกลุ่มผู้ใช้

ด้วยไฟล์นั้นและค่าที่เหมาะสม แอปพลิเคชันสาธิตสามารถเปิดใช้งานได้ หากมีข้อยกเว้นเกิดขึ้นระหว่างการเปิดใช้ ตรวจสอบให้แน่ใจว่าคุณได้รวมค่าสี่ค่าที่แสดงด้านล่างและไฟล์นั้นอยู่ในไดเร็กทอรีที่ถูกต้อง

plist การกำหนดค่าใน Xcode
การกำหนดค่ากลุ่มผู้ใช้ใน Xcode ด้วยไฟล์ plist (ดูเวอร์ชันขนาดใหญ่)

การผสานรวมผู้มอบสิทธิ์แอป

แกนหลักของการผสานรวมกับ Amazon Cognito เกิดขึ้นภายใน AppDelegate ของแอปพลิเคชัน ขั้นตอนแรกของเราคือตรวจสอบให้แน่ใจว่าเราได้ตั้งค่าการบันทึกและเชื่อมต่อกับกลุ่มผู้ใช้ของเราแล้ว ในส่วนหนึ่งของกระบวนการนั้น เราจะกำหนด AppDelegate ของเราเป็นผู้รับมอบสิทธิ์ของกลุ่มผู้ใช้ สำหรับตัวอย่างพื้นฐานนี้ เราสามารถเก็บตรรกะนี้ไว้ใน AppDelegate สำหรับโครงการขนาดใหญ่ การจัดการที่อื่นอาจสมเหตุสมผล

 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 }

หลังจากกำหนดค่านี้แล้ว เราจำเป็นต้องกำหนดค่าวิธีการมอบสิทธิ์สำหรับพูลผู้ใช้ โปรโตคอลที่เราใช้คือ AWSCognitoIdentityInteractiveAuthenticationDelegate ผู้รับมอบสิทธิ์รายนี้จะถูกเรียกทุกครั้งที่ผู้ใช้จำเป็นต้องเข้าสู่ระบบ รีเซ็ตรหัสผ่านหรือระบุรหัสการตรวจสอบสิทธิ์แบบหลายปัจจัย หรือหากเราจำเป็นต้องสอบถามผู้ใช้ว่าต้องการให้จดจำอุปกรณ์ของตนหรือไม่ สำหรับตัวอย่างของเรา เราจำเป็นต้องใช้ startPasswordAuthentication และ 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! } }

สิ่งสำคัญประการหนึ่งที่ควรทราบคือทั้งสองวิธีนี้จะส่งคืนตัวควบคุมมุมมองที่ใช้โปรโตคอลเฉพาะ ตัวอย่างเช่น LoginViewController ใช้ AWSCognitoIdentityPasswordAuthentication ซึ่งมีเมธอดเดียวที่ได้รับการเรียกด้วยพารามิเตอร์ที่จำเป็นเพื่อให้ผู้ใช้ดำเนินการกระบวนการเข้าสู่ระบบให้เสร็จสิ้น

ขั้นตอนการตรวจสอบสิทธิ์

ด้วยส่วนประกอบทั้งหมดเหล่านี้ในแอปพลิเคชันสาธิต ตอนนี้คุณสามารถเห็นกระบวนการเข้าสู่ระบบทำงานตั้งแต่ต้นจนจบ มุมมองหลักของแอปพลิเคชันจะแสดงชื่อผู้ใช้และชื่อและนามสกุลของผู้ใช้ เพื่อให้สิ่งนี้เกิดขึ้น มีขั้นตอนต่อไปนี้เกิดขึ้น:

  1. ใน AppViewController เราเรียกเมธอด fetchUserAttributes ในเมธอด viewDidLoad หากผู้ใช้ไม่ได้เข้าสู่ระบบ การดำเนินการนี้จะทริกเกอร์กระบวนการเข้าสู่ระบบ
  2. เมธอด startPasswordAuthentication ใน AppDelegate จะถูกทริกเกอร์ วิธีนี้จะโหลด LoginViewController และนำเสนอ
  3. วิธีการ getDetails ของ LoginViewController ถูกเรียกโดย AWS SDK ซึ่งรวมถึงวัตถุที่เป็นอินสแตนซ์ของ AWSTaskCompletionSource ซึ่งเราสามารถใช้เพื่ออนุญาตให้ผู้ใช้พยายามเข้าสู่ระบบ
  4. เมื่อผู้ใช้กดปุ่ม "เข้าสู่ระบบ" เราจะส่งข้อมูลการเข้าสู่ระบบไปยังวัตถุนั้น จากนั้นจะเรียกเมธอด didCompleteStepWithError และเราสามารถจัดการผลลัพธ์ได้ หากไม่มีข้อผิดพลาด เราสามารถยกเลิกตัวควบคุมการดูได้
  5. หากเราสร้างผู้ใช้ในคอนโซล เราจะมีขั้นตอนอื่นที่ต้องจัดการที่นี่ เนื่องจากเราให้รหัสผ่านชั่วคราวแก่ผู้ใช้ พวกเขาจึงต้องตั้งรหัสผ่านถาวรมากกว่านี้ นอกจากนี้ เนื่องจากเราตั้งค่าชื่อและนามสกุลที่ระบุเป็นพารามิเตอร์ที่จำเป็น เราจึงต้องอนุญาตให้ผู้ใช้ป้อนค่าเหล่านี้ด้วย AWS SDK จะตรวจพบสิ่งนี้และเรียกเมธอด startNewPasswordRequired ใน AppDelegate สิ่งนี้จะแสดง ResetPasswordViewController และตั้งค่าอินสแตนซ์ของ AWSTaskCompletionSource
  6. ResetPasswordViewController ทำงานเกือบเหมือนกันกับ LoginViewController เราเพียงแค่ต้องขอค่าที่ถูกต้องจากผู้ใช้แล้วส่งค่าเหล่านั้น เมื่อกระบวนการนี้เสร็จสมบูรณ์ เราจะยกเลิกตัวควบคุมการดู
  7. เมื่อกระบวนการเข้าสู่ระบบทั้งหมดเสร็จสิ้น SDK จะจัดเก็บโทเค็นที่ส่งคืนโดย Cognito อย่างปลอดภัย จากนั้น ในที่สุด เราจะดึงรายละเอียดผู้ใช้ และเราสามารถใช้ข้อมูลเหล่านี้เพื่อเติม AppViewController ด้วยชื่อผู้ใช้ ชื่อ และนามสกุลของผู้ใช้

แอปพลิเคชั่นทำงานพร้อมการรับรองความถูกต้องทำงาน
แอปพลิเคชันตัวอย่างการทำงาน แสดงชื่อผู้ใช้และข้อมูลเมตา

บทสรุป

แม้ว่ากระบวนการตั้งค่าพูลผู้ใช้อาจมีหลายขั้นตอน แต่ขั้นตอนเหล่านั้นก็ใช้งานง่าย นอกจากนี้ จำนวนการกำหนดค่าที่เป็นไปได้ควรให้ความมั่นใจแก่คุณว่าสามารถรองรับกรณีการใช้งานส่วนใหญ่ได้ ในงานประจำวันของฉันที่ Universal Mind ฉันได้ทำงานร่วมกับลูกค้าหลายรายที่กำลังย้ายแอปพลิเคชันที่มีอยู่ไปใช้เพื่อใช้ประโยชน์จากความสามารถที่ Cognito มีให้สำหรับการจัดการผู้ใช้

ไม่ว่าคุณจะต้องใช้ระบบการจัดการผู้ใช้เป็นประจำหรือไม่ก็ตาม นี่เป็น เครื่องมือที่นักพัฒนามือถือและเว็บทุกคนควรมีในกล่องเครื่องมือของตน ในบทความถัดไปของชุดข้อมูลนี้ เราจะเริ่มสำรวจความสามารถของ Cognito เพิ่มเติมอีกเล็กน้อยโดยใช้แอปพลิเคชันสาธิตที่มีคุณสมบัติครบถ้วนมากขึ้น ซึ่งจะปรับใช้กรณีการใช้งานการจัดการผู้ใช้ทั่วไปมากขึ้น

ด้วยการฝึกฝนเล็กน้อย คุณสามารถสร้างความประทับใจให้เพื่อน ๆ ทุกคนด้วยการตั้งค่าแอปพลิเคชันใหม่ที่ตอบสนองกรณีการใช้งานการจัดการผู้ใช้ทั้งหมดภายในวันเดียว มันค่อนข้างดีสำหรับการทำงานหนึ่งวัน

ลิงค์และแหล่งข้อมูล

  • Amazon Cognito
  • “แหล่งข้อมูลสำหรับนักพัฒนา” Amazon Cognito
  • AWS Mobile SDK
  • “บทแนะนำ CocoaPods สำหรับ Swift: เริ่มต้นใช้งาน” Joshua Greene, raywenderlich.com