การควบคุมการเข้าถึงระดับแอป (App-level access control)
การควบคุมการเข้าถึงระดับแอปช่วยให้คุณจำกัดว่าใครสามารถลงชื่อเข้าใช้แอปพลิเคชันเฉพาะได้ แทนที่จะอนุญาตให้ผู้ใช้ที่ลงทะเบียนทุกคนใน Logto tenant ของคุณเข้าถึงทุกแอป คุณสามารถสร้างกฎอนุญาตสำหรับแต่ละแอปพลิเคชันโดยอิงจากผู้ใช้, บทบาทผู้ใช้, องค์กร หรือบทบาทองค์กร
ใช้การควบคุมการเข้าถึงระดับแอปเมื่อคุณต้องการ:
- ทำให้แอปภายในใช้งานได้เฉพาะกับพนักงานหรือผู้ดูแลระบบเท่านั้น
- จำกัด Protected App ให้กับกลุ่มผู้ใช้ที่เลือกไว้
- อนุญาตเฉพาะลูกค้าหรือพาร์ทเนอร์บางรายให้เข้าถึง แอป OIDC / OAuth ของบุคคลที่สาม
- เปิดตัวแอปใหม่กับกลุ่มนำร่องก่อนเปิดให้ทุกคนใช้งาน
วิธีการทำงาน
เมื่อปิดการควบคุมการเข้าถึงระดับแอป ผู้ใช้ที่ลงทะเบียนทุกคนใน Logto tenant ของคุณสามารถลงชื่อเข้าใช้แอปพลิเคชันได้
เมื่อเปิดใช้งาน ผู้ใช้จะสามารถเข้าถึงแอปพลิเคชันได้ก็ต่อเมื่อเขาตรงกับกฎที่กำหนดไว้อย่างน้อยหนึ่งข้อ หากผู้ใช้ไม่ตรงกับกฎใดเลย Logto จะปฏิเสธความพยายามในการลงชื่อเข้าใช้และแสดงหน้าถูกปฏิเสธการเข้าถึงก่อนที่แอปพลิเคชันจะได้รับโทเค็น
การควบคุมการเข้าถึงระดับแอปจะถูกประเมินระหว่างกระบวนการอนุญาต (authorization flow) และการต่ออายุโทเค็น (token renewal) ซึ่งหมายความว่า:
- ผู้ใช้ที่ไม่มีสิทธิ์เข้าถูกบล็อกก่อนที่จะลงชื่อเข้าใช้แอปพลิเคชันได้สำเร็จ
- การให้สิทธิ์แอปที่มีอยู่จะถูกตรวจสอบอีกครั้งเมื่อใช้โทเค็นรีเฟรชเพื่อขอโทเค็นใหม่
- การอัปเดตกฎจะมีผลกับการตรวจสอบการอนุญาตและการต่ออายุโทเค็นในอนาคต โดยไม่เปลี่ยนแปลงเซสชัน Logto ระดับโกลบอลของผู้ใช้
การควบคุมการเข้าถึงระดับแอปแยกออกจาก การควบคุมการเข้าถึงตามบทบาท (RBAC) RBAC ควบคุมสิ่งที่ผู้ใช้สามารถทำได้หลังการยืนยันตัวตนโดยการออกสิทธิ์ (ขอบเขต; scopes) ในโทเค็นการเข้าถึง การควบคุมการเข้าถึงระดับแอปควบคุมว่าผู้ใช้จะสามารถเข้าถึงแอปพลิเคชันนั้นได้หรือไม่
ประเภทของกฎ
คุณสามารถกำหนดกฎอนุญาตต่อไปนี้ได้:
| ประเภทกฎ | สิ่งที่อนุญาต |
|---|---|
| ผู้ใช้ (Users) | ผู้ใช้เฉพาะรายสามารถเข้าถึงแอปพลิเคชันได้ |
| บทบาทผู้ใช้ (User roles) | ผู้ใช้ที่ได้รับมอบหมายบทบาทผู้ใช้ที่เลือกไว้สามารถเข้าถึงแอปพลิเคชันได้ |
| องค์กร (Organizations) | สมาชิกปัจจุบันและอนาคตทั้งหมดขององค์กรที่เลือกไว้สามารถเข้าถึงแอปพลิเคชันได้ |
| บทบาทองค์กร (Organization roles) | สมาชิกที่มีบทบาทองค์กรที่เลือกไว้ในองค์กรที่เลือกไว้สามารถเข้าถึงแอปพลิเคชันได้ |
กฎเป็นแบบบวก (additive) ผู้ใช้เพียงแค่ตรงกับกฎข้อใดข้อหนึ่งก็สามารถเข้าถึงแอปพลิเคชันได้
ตัวอย่างเช่น หากแอปพลิเคชันมีทั้งกฎบทบาทผู้ใช้ “Support team” และกฎบทบาทองค์กร “BigTree - Admin” ผู้ใช้จะสามารถเข้าถึงแอปได้หากได้รับมอบหมายบทบาท Support team หรือเป็น Admin ในองค์กร BigTree
ตั้งค่าการควบคุมการเข้าถึงระดับแอป
- ไปที่ Console > Applications
- เปิดแอปพลิเคชันที่คุณต้องการจำกัดการเข้าถึง
- ไปที่แท็บ Rules
- ใน Custom allow rules คลิก Add rules
- เลือกประเภทกฎ:
- Users
- User roles
- Organizations
- Organization roles
- เลือกผู้ใช้, บทบาท, องค์กร หรือบทบาทองค์กรที่ควรได้รับอนุญาตให้เข้าถึงแอปพลิเคชัน
- เปิดใช้งาน Enable access control
- คลิก Save changes
คุณต้องกำหนดกฎอนุญาตอย่างน้อยหนึ่งข้อก่อนเปิดใช้งานการควบคุมการเข้าถึง เพื่อป้องกันการเปิดใช้งานโดยไม่ได้ตั้งใจโดยไม่มีผู้ใช้ใดได้รับอนุญาตให้เข้าถึงแอปพลิเคชัน
แก้ไขหรือลบกฎ
คุณสามารถอัปเดตรายการอนุญาตได้จากแท็บ Rules ของแอปพลิเคชัน
- เพื่อเพิ่มกฎเพิ่มเติม คลิก Add another ใต้ตารางกฎ
- เพื่อลบกฎ คลิกปุ่มลบในแถวของกฎนั้นและยืนยันการดำเนินการ
- หลังจากเพิ่มหรือลบกฎ คลิก Save changes เพื่อบันทึกการอัปเดต
หากเปิดใช้งานการควบคุมการเข้าถึง Logto ต้องการให้มีกฎอย่างน้อยหนึ่งข้อคงอยู่ หากต้องการลบกฎทั้งหมด ให้ปิด Enable access control ก่อน แล้วจึงบันทึกการเปลี่ยนแปลง
ผลกระทบของการเปลี่ยนกฎต่อผู้ใช้
การควบคุมการเข้าถึงระดับแอปจะไม่ยุติเซสชัน Logto ระดับโกลบอลของผู้ใช้ ผู้ใช้อาจยังคงลงชื่อเข้าใช้ Logto และแอปพลิเคชันอื่น ๆ ได้
สำหรับแอปพลิเคชันที่ถูกจำกัด:
- ผู้ใช้ที่ไม่ตรงกับกฎอนุญาตใด ๆ อีกต่อไปจะถูกบล็อกเมื่อเข้าสู่กระบวนการอนุญาตของแอปพลิเคชันในครั้งถัดไป
- หากผู้ใช้มีการให้สิทธิ์ที่เกี่ยวข้องกับแอปอยู่แล้ว Logto จะตรวจสอบกฎอีกครั้งเมื่อแอปใช้โทเค็นรีเฟรชเพื่อขอโทเค็นใหม่ หากผู้ใช้ไม่มีสิทธิ์เข้าถึงอีกต่อไป Logto จะปฏิเสธคำขอโทเค็น
สิ่งนี้ทำให้การตัดสินใจเข้าถึงผูกกับแต่ละแอปพลิเคชันโดยไม่รบกวนแอปอื่นที่ไม่เกี่ยวข้องโดยไม่จำเป็น
ความสัมพันธ์กับสิทธิ์ของแอปบุคคลที่สาม
สำหรับ แอปพลิเคชันบุคคลที่สาม การควบคุมการเข้าถึงระดับแอปและการจัดการสิทธิ์แก้ปัญหาคนละด้านกัน:
- การควบคุมการเข้าถึงระดับแอป กำหนดว่าผู้ใช้ได้รับอนุญาตให้ลงชื่อเข้าใช้แอปบุคคลที่สามหรือไม่
- การจัดการสิทธิ์ กำหนดว่าแอปบุคคลที่สามสามารถขอขอบเขตโปรไฟล์ผู้ใช้, ขอบเขตทรัพยากร API และขอบเขตองค์กรใดบนหน้าขอความยินยอม (consent screen) ได้บ้าง
หากกำหนดทั้งสองอย่าง ผู้ใช้ต้องผ่านการควบคุมการเข้าถึงระดับแอปก่อนจึงจะสามารถอนุญาตแอปบุคคลที่สามได้
การควบคุมการเข้าถึงระดับแอปใช้ได้กับแอปพลิเคชันที่ลงทะเบียนเท่านั้น Dynamic app ไม่มีระเบียนแอปพลิเคชัน จึงไม่สามารถจำกัดด้วยวิธีนี้ได้ การเข้าถึงของพวกเขาถูกจำกัดด้วยสิทธิ์ที่คุณให้กับ dynamic app และโดยความยินยอมของผู้ใช้
ความสัมพันธ์กับ Protected App
สำหรับ Protected App การควบคุมการเข้าถึงระดับแอปจะจำกัดว่าใครสามารถผ่านชั้นการยืนยันตัวตนของ Logto และเข้าถึงต้นทางที่ได้รับการปกป้องได้
กฎการยืนยันตัวตนของ Protected App ยังคงกำหนดว่า route ใดต้องการการยืนยันตัวตน การควบคุมการเข้าถึงระดับแอปจะกำหนดว่าผู้ใช้ Logto ที่ได้รับการยืนยันตัวตนคนใดได้รับอนุญาตให้เข้าถึง Protected App
แนวทางปฏิบัติที่ดีที่สุด
- เริ่มต้นด้วยกฎบทบาทผู้ใช้หรือบทบาทองค์กรเมื่อเป็นไปได้ เพราะดูแลรักษาง่ายกว่ารายชื่อผู้ใช้ยาว ๆ
- ใช้กฎองค์กรเมื่อทุกคนในองค์กรควรเข้าถึงแอป
- ใช้กฎบทบาทองค์กรเมื่อเฉพาะสมาชิกบางคนในองค์กรควรเข้าถึงแอป
- ทบทวนกฎการเข้าถึงเมื่อผู้ใช้เปลี่ยนบทบาท, เข้าร่วมองค์กร หรือออกจากองค์กร
- แยก RBAC และการควบคุมการเข้าถึงระดับแอปในโมเดลความคิดของคุณ: การควบคุมการเข้าถึงระดับแอปตอบว่า “ผู้ใช้คนนี้เข้าถึงแอปนี้ได้หรือไม่?” ขณะที่ RBAC ตอบว่า “ผู้ใช้คนนี้ทำอะไรได้บ้างหลังเข้าถึง API หรือฟีเจอร์ขององค์กร?”