การยืนยันตัวตนผู้ใช้ด้วย Amazon Cognito

การ Deploy แอปพลิเคชันบน AWS

Dunieski Otano

Amazon Web Services Solutions Architect

สร้างระบบล็อกอินเอง?

  • แอปใหม่ต้องการระบบสมัครและล็อกอินแบบครบวงจร
  • ทีมเริ่มสร้างระบบ auth ขึ้นมาเอง
  • Cognito ทำสิ่งนี้ได้อย่างปลอดภัยอยู่แล้ว

เลือกใช้ Amazon Cognito แทนการสร้างระบบล็อกอินเอง

การ Deploy แอปพลิเคชันบน AWS

User pool vs Identity pool

Cognito User Pool เป็น user directory ที่ออก token ทางซ้าย, Identity Pool แลกเปลี่ยน token ที่ผ่านการยืนยันเป็น AWS credentials ตรงกลาง, และบริการ AWS ทางขวา

  • User pool: ไดเรกทอรีผู้ใช้แบบ managed
  • จัดการสมัคร, ล็อกอิน และออก token
  • Identity pool: แลกเปลี่ยนการล็อกอินเป็น AWS credentials
  • ใช้ร่วมกัน: ยืนยันตัวตนก่อน แล้วจึงอนุญาตการเข้าถึง AWS
การ Deploy แอปพลิเคชันบน AWS

Cognito token ทั้งสามประเภท

  • ID token: ระบุว่าผู้ใช้คือใคร (identity claims)
  • Access token: ระบุสิ่งที่ผู้ใช้เรียกใช้ได้
  • Refresh token: ขอ token ใหม่โดยไม่ต้องล็อกอินซ้ำ
  • ทั้งสามตัวเป็น JWT ที่ถอดรหัสและตรวจสอบได้

Cognito JWT token สามตัวเรียงกัน: ID token พร้อม identity claims, access token พร้อม API permission scopes, refresh token ระบุว่าใช้งานได้นานสำหรับการต่ออายุแบบอัตโนมัติ

การ Deploy แอปพลิเคชันบน AWS

Federated identity

  • Federation: ล็อกอินด้วย identity provider ภายนอก
  • โซเชียล: Google, Facebook, Apple
  • องค์กร: provider แบบ SAML และ OIDC
  • Cognito ทำหน้าที่เชื่อมความน่าเชื่อถือและออก token ของตัวเอง

Cognito federation: ผู้ใช้เลือก social provider (Google, Facebook) หรือ enterprise SAML/OIDC provider, Cognito ยืนยันการล็อกอินจากภายนอกและออก token มาตรฐานของตัวเอง

การ Deploy แอปพลิเคชันบน AWS

Cognito ในฐานะ API Gateway authorizer

API Gateway Cognito authorizer: client ส่ง Authorization header พร้อม access token, gateway ตรวจสอบกับ user pool ก่อน Lambda ทำงาน, token ที่ไม่ถูกต้องถูกปฏิเสธด้วย 401

  • API Gateway ใช้ Cognito authorizer ได้
  • Client ส่ง token ใน Authorization header
  • API Gateway ตรวจสอบ token ก่อน backend ทำงาน
  • Token ที่ไม่ถูกต้องหรือหมดอายุจะถูกปฏิเสธตั้งแต่ขอบ
การ Deploy แอปพลิเคชันบน AWS

ขั้นตอนทั่วไปจากการล็อกอินถึงการเรียก API

  • ผู้ใช้ล็อกอินเข้า user pool
  • รับ ID, access และ refresh token
  • Client เรียก API Gateway พร้อม access token
  • Cognito authorizer ตรวจสอบ token แล้ว backend จึงทำงาน

ขั้นตอนจากการล็อกอินถึงการเรียก API: ผู้ใช้ล็อกอินเข้า user pool และรับ token, client ส่ง access token ไปยัง API Gateway, Cognito authorizer ตรวจสอบ, Lambda ของ backend ทำงาน

การ Deploy แอปพลิเคชันบน AWS

ข้อผิดพลาดที่พบบ่อยกับ Cognito

  • ส่ง ID token ในตำแหน่งที่ควรเป็น access token
  • สับสนระหว่าง user pool กับ identity pool
  • พยายามอนุญาต การเข้าถึง AWS ด้วย user pool เพียงอย่างเดียว
  • เก็บ token อย่างไม่ปลอดภัยบฝั่ง client

ข้อผิดพลาดที่พบบ่อยกับ Cognito: ส่ง ID token ไปยัง API แทน access token, สับสนระหว่าง user pool กับ identity pool, และเก็บ token อย่างไม่ปลอดภัยบฝั่ง client

การ Deploy แอปพลิเคชันบน AWS

มาฝึกกันเถอะ!

การ Deploy แอปพลิเคชันบน AWS

Preparing Video For Download...