User pool, identity pool และ JWT

การใช้ AWS Security สำหรับนักพัฒนา

Rahul Singh

Technical Product Manager

Cognito คือสองบริการในชื่อเดียว

Amazon Cognito

  • ระบบจัดการตัวตนสำหรับผู้ใช้แอปพลิเคชัน
  • ชื่อเดียว แต่เป็นสองบริการแยกกัน

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

การใช้ AWS Security สำหรับนักพัฒนา

Cognito คือสองบริการในชื่อเดียว

Amazon Cognito

  • ระบบจัดการตัวตนสำหรับผู้ใช้แอปพลิเคชัน
  • ชื่อเดียว แต่เป็นสองบริการแยกกัน

ต้องใช้บริการไหน

  • ลงชื่อเข้าใช้และโปรไฟล์ผู้ใช้: user pool
  • เบราว์เซอร์หรือมือถือเรียก AWS โดยตรง: identity pool

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

การใช้ AWS Security สำหรับนักพัฒนา

User pool ทำหน้าที่ลงชื่อเข้าใช้ให้ผู้ใช้

ไดเรกทอรีผู้ใช้ที่มีการจัดการ

  • ลงทะเบียนและลงชื่อเข้าใช้
  • รีเซ็ตรหัสผ่าน
  • การยืนยันตัวตนแบบหลายปัจจัย

ผังแนวตั้ง: ผู้ใช้แอปลงชื่อเข้าใช้ที่ user pool ซึ่งเก็บรหัสผ่าน แล้ว pool จะส่งกลับกล่องที่มี ID token, access token และ refresh token

การใช้ AWS Security สำหรับนักพัฒนา

User pool ทำหน้าที่ลงชื่อเข้าใช้ให้ผู้ใช้

ไดเรกทอรีผู้ใช้ที่มีการจัดการ

  • ลงทะเบียนและลงชื่อเข้าใช้
  • รีเซ็ตรหัสผ่าน
  • การยืนยันตัวตนแบบหลายปัจจัย

 

เมื่อสำเร็จ จะได้ token สามรายการ

ผังแนวตั้ง: ผู้ใช้แอปลงชื่อเข้าใช้ที่ user pool ซึ่งเก็บรหัสผ่าน แล้ว pool จะส่งกลับกล่องที่มี ID token, access token และ refresh token

การใช้ AWS Security สำหรับนักพัฒนา

User pool ทำหน้าที่ลงชื่อเข้าใช้ให้ผู้ใช้

ไดเรกทอรีผู้ใช้ที่มีการจัดการ

  • ลงทะเบียนและลงชื่อเข้าใช้
  • รีเซ็ตรหัสผ่าน
  • การยืนยันตัวตนแบบหลายปัจจัย

 

เมื่อสำเร็จ จะได้ token สามรายการ

  • ID token: บอกว่าผู้ใช้คือใคร
  • Access token: บอกว่าเรียกอะไรได้บ้าง
  • Refresh token: ใช้ขอ token ใหม่ในภายหลัง

ผังแนวตั้ง: ผู้ใช้แอปลงชื่อเข้าใช้ที่ user pool ซึ่งเก็บรหัสผ่าน แล้ว pool จะส่งกลับกล่องที่มี ID token, access token และ refresh token

การใช้ AWS Security สำหรับนักพัฒนา

Identity pool ออก AWS credential

Token ไม่ใช่ credential

  • เป็นหลักฐานยืนยันตัวตนสำหรับแอป
  • ไม่ใช่ credential สำหรับเข้าถึงบริการ AWS

 

Identity pool: ป้อน token ที่เชื่อถือได้ รับ credential กลับมา

ผังแนวตั้งที่มีโครงสร้างเดียวกับแผนภาพ user pool: token ที่เชื่อถือได้ถูกส่งไปยัง identity pool ซึ่งตรวจสอบผู้ออก token แล้วส่งกลับ AWS credential ที่จำกัดขอบเขตไว้กับหนึ่ง role และมีวันหมดอายุ

การใช้ AWS Security สำหรับนักพัฒนา

Identity pool ออก AWS credential

Token ไม่ใช่ credential

  • เป็นหลักฐานยืนยันตัวตนสำหรับแอป
  • ไม่ใช่ credential สำหรับเข้าถึงบริการ AWS

 

Identity pool: ป้อน token ที่เชื่อถือได้ รับ credential กลับมา

  • build job นำ OIDC token ไปแลกเปลี่ยน
  • หลักฐานที่ถืออยู่ แลกเป็นบัตรผ่าน

ผังแนวตั้งที่มีโครงสร้างเดียวกับแผนภาพ user pool: token ที่เชื่อถือได้ถูกส่งไปยัง identity pool ซึ่งตรวจสอบผู้ออก token แล้วส่งกลับ AWS credential ที่จำกัดขอบเขตไว้กับหนึ่ง role และมีวันหมดอายุ

การใช้ AWS Security สำหรับนักพัฒนา

แอปเดียว ใช้ทั้งสองส่วน

เบราว์เซอร์ที่ใช้ทั้งสองบริการ

  1. ลงชื่อเข้าใช้ รับ token
  2. ส่ง token นั้นไปยัง API

Bearer token: ใครถือก็ใช้งานได้

ผังแนวตั้ง เบราว์เซอร์ลงชื่อเข้าใช้ที่ user pool ซึ่งส่งกลับ token เดียวกันนี้จะแยกออกเป็นสองทาง ทางซ้ายไปยัง API และทางขวาไปยัง identity pool identity pool จะส่งกลับ credential และ credential นั้นคือสิ่งที่เข้าถึง S3

การใช้ AWS Security สำหรับนักพัฒนา

แอปเดียว ใช้ทั้งสองส่วน

เบราว์เซอร์ที่ใช้ทั้งสองบริการ

  1. ลงชื่อเข้าใช้ รับ token
  2. ส่ง token นั้นไปยัง API
  3. นำ token เดียวกันไปแลกเป็น credential

ผังแนวตั้ง เบราว์เซอร์ลงชื่อเข้าใช้ที่ user pool ซึ่งส่งกลับ token เดียวกันนี้จะแยกออกเป็นสองทาง ทางซ้ายไปยัง API และทางขวาไปยัง identity pool identity pool จะส่งกลับ credential และ credential นั้นคือสิ่งที่เข้าถึง S3

การใช้ AWS Security สำหรับนักพัฒนา

แอปเดียว ใช้ทั้งสองส่วน

เบราว์เซอร์ที่ใช้ทั้งสองบริการ

  1. ลงชื่อเข้าใช้ รับ token
  2. ส่ง token นั้นไปยัง API
  3. นำ token เดียวกันไปแลกเป็น credential
  4. ใช้ credential นั้นเข้าถึง S3

Token ไปที่โค้ด credential ไปที่ AWS

ผังแนวตั้ง เบราว์เซอร์ลงชื่อเข้าใช้ที่ user pool ซึ่งส่งกลับ token เดียวกันนี้จะแยกออกเป็นสองทาง ทางซ้ายไปยัง API และทางขวาไปยัง identity pool identity pool จะส่งกลับ credential และ credential นั้นคือสิ่งที่เข้าถึง S3

การใช้ AWS Security สำหรับนักพัฒนา

Token คือข้อความที่มี signature

สามส่วนที่เชื่อมกันด้วยจุด มีป้ายกำกับว่า Header, Payload และ Signature มีไอคอนแม่กุญแจเปิดอยู่บน payload และวงเล็บใต้สองส่วนแรกแสดงขอบเขตที่ signature ครอบคลุมถึง

JWT: JSON Web Token

  • Claims: ข้อความที่มีป้ายกำกับเกี่ยวกับผู้ใช้
การใช้ AWS Security สำหรับนักพัฒนา

Token คือข้อความที่มี signature

สามส่วนที่เชื่อมกันด้วยจุด มีป้ายกำกับว่า Header, Payload และ Signature มีไอคอนแม่กุญแจเปิดอยู่บน payload และวงเล็บใต้สองส่วนแรกแสดงขอบเขตที่ signature ครอบคลุมถึง

JWT: JSON Web Token

  • Claims: ข้อความที่มีป้ายกำกับเกี่ยวกับผู้ใช้
  • เป็นการ encode ไม่ใช่ encrypt
  • ใครก็อ่านได้และใครก็แก้ไขได้
การใช้ AWS Security สำหรับนักพัฒนา

ตรวจสอบก่อนอ่าน

ต้องตรวจสอบก่อน

  • JWKS: JSON Web Key Set คือ public signing key ของผู้ออก token
  • ตรวจสอบ signature กับ key เหล่านั้น

แผนภาพประตูตรวจสอบแนวตั้ง token เข้ามาและผ่านการตรวจสอบสี่ขั้นตอนตามลำดับ ได้แก่ signature, issuer, audience และ expiry public key ของผู้ออก token จะถูกป้อนเข้าสู่การตรวจสอบ signature จากด้านข้าง และเมื่อผ่านขั้นตอนที่สี่แล้วเท่านั้น เส้นทางจะไปถึงกล่องสีเขียวสำหรับอ่าน claims

การใช้ AWS Security สำหรับนักพัฒนา

ตรวจสอบก่อนอ่าน

ต้องตรวจสอบก่อน

  • JWKS: JSON Web Key Set คือ public signing key ของผู้ออก token
  • ตรวจสอบ signature กับ key เหล่านั้น

 

จากนั้นตรวจสอบ claims อีกสามรายการ

  • iss: user pool ของคุณ
  • aud บน ID token และ client_id บน access token
  • exp: ยังไม่หมดอายุ

แผนภาพประตูตรวจสอบแนวตั้ง token เข้ามาและผ่านการตรวจสอบสี่ขั้นตอนตามลำดับ ได้แก่ signature, issuer, audience และ expiry public key ของผู้ออก token จะถูกป้อนเข้าสู่การตรวจสอบ signature จากด้านข้าง และเมื่อผ่านขั้นตอนที่สี่แล้วเท่านั้น เส้นทางจะไปถึงกล่องสีเขียวสำหรับอ่าน claims

การใช้ AWS Security สำหรับนักพัฒนา

Token ที่ตรวจสอบผ่านแล้วก็ยังผิดได้

การ์ดคู่หนึ่งวางเคียงกัน การ์ด ID token มีป้ายกำกับว่าเป็น identity token แสดง client ID ที่เก็บอยู่ใน audience claim และระบุว่าไม่มี scope อยู่เหนือกล่องสีเทาสำหรับบอกว่าผู้ใช้คือใคร การ์ด access token มีป้ายกำกับว่าเป็น access token แสดง client ID ที่เก็บอยู่ใน client identifier claim ของตัวเอง และระบุว่ามี scope อยู่เหนือกล่องสีส้มสำหรับบอกว่าเรียกอะไรได้บ้าง แถบเส้นประด้านล่างการ์ดทั้งสองระบุว่า claim ของกลุ่ม Cognito ปรากฏอยู่ใน token ทั้งสองแบบ

ตรวจสอบผ่านแล้ว แต่ยังเป็น token ผิดประเภท

การใช้ AWS Security สำหรับนักพัฒนา

Token ที่ตรวจสอบผ่านแล้วก็ยังผิดได้

การ์ดคู่หนึ่งวางเคียงกัน การ์ด ID token มีป้ายกำกับว่าเป็น identity token แสดง client ID ที่เก็บอยู่ใน audience claim และระบุว่าไม่มี scope อยู่เหนือกล่องสีเทาสำหรับบอกว่าผู้ใช้คือใคร การ์ด access token มีป้ายกำกับว่าเป็น access token แสดง client ID ที่เก็บอยู่ใน client identifier claim ของตัวเอง และระบุว่ามี scope อยู่เหนือกล่องสีส้มสำหรับบอกว่าเรียกอะไรได้บ้าง แถบเส้นประด้านล่างการ์ดทั้งสองระบุว่า claim ของกลุ่ม Cognito ปรากฏอยู่ใน token ทั้งสองแบบ

ตรวจสอบผ่านแล้ว แต่ยังเป็น token ผิดประเภท

token_use บอกว่าเป็น token ชนิดไหน

  • cognito:groups ปรากฏในทั้งสองชนิด และไม่ใช่ scope

  • scope: สิ่งที่ token เรียกใช้ได้

  • sub: ผู้ใช้คนไหน และไม่เปลี่ยนแปลง
  • ตัวตนไม่ใช่สิทธิ์การใช้งาน
การใช้ AWS Security สำหรับนักพัฒนา

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

การใช้ AWS Security สำหรับนักพัฒนา

Preparing Video For Download...