เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ
NocoBase รองรับการขยายประเภทการยืนยันตัวตนของผู้ใช้ได้ตามต้องการครับ/ค่ะ โดยทั่วไปแล้ว การยืนยันตัวตนของผู้ใช้มีอยู่สองประเภทหลัก ๆ ประเภทแรกคือการยืนยันตัวตนภายในแอปพลิเคชัน NocoBase เอง เช่น การเข้าสู่ระบบด้วยรหัสผ่าน หรือการเข้าสู่ระบบด้วย SMS เป็นต้น อีกประเภทหนึ่งคือการให้บริการจากบุคคลที่สามเป็นผู้ยืนยันตัวตนของผู้ใช้ และแจ้งผลลัพธ์กลับมายังแอปพลิเคชัน NocoBase ผ่าน Callback เช่น การยืนยันตัวตนแบบ OIDC, SAML เป็นต้น กระบวนการยืนยันตัวตนสำหรับทั้งสองประเภทนี้ใน NocoBase มีดังต่อไปนี้ครับ/ค่ะ
api.auth.signIn() ซึ่งเป็นการร้องขอไปยังอินเทอร์เฟซ auth:signIn พร้อมทั้งส่งตัวระบุ Authenticator ที่ใช้งานอยู่ปัจจุบันไปให้ Backend ผ่าน Header X-Authenticator ครับ/ค่ะauth:signIn จะส่งต่อคำขอไปยังประเภทการยืนยันตัวตนที่ตรงกับตัวระบุ Authenticator ใน Header โดยเมธอด validate ที่ลงทะเบียนไว้ในคลาสการยืนยันตัวตนของประเภทนั้น ๆ จะทำหน้าที่ประมวลผลตามตรรกะที่กำหนดไว้ครับ/ค่ะtoken สำหรับการยืนยันตัวตนจากการตอบกลับของอินเทอร์เฟซ auth:signIn จากนั้นจะบันทึก token ลงใน Local Storage และเข้าสู่ระบบสำเร็จ ขั้นตอนนี้จะถูกจัดการโดยอัตโนมัติภายใน SDK ครับ/ค่ะ
auth:getAuthUrl) พร้อมทั้งส่งข้อมูลชื่อแอปพลิเคชันและตัวระบุ Authenticator ตามโปรโตคอลที่กำหนดครับ/ค่ะauth:redirect) เพื่อส่งคืนผลลัพธ์การยืนยันตัวตน พร้อมทั้งส่งคืนข้อมูลชื่อแอปพลิเคชันและตัวระบุ Authenticator ครับ/ค่ะAuthManager เพื่อเรียกคลาสการยืนยันตัวตนที่เกี่ยวข้อง และเรียกใช้เมธอด auth.signIn() โดยตรง เมธอด auth.signIn() จะเรียกใช้เมธอด validate() เพื่อจัดการตรรกะการตรวจสอบสิทธิ์ครับ/ค่ะtoken การยืนยันตัวตนแล้ว จะทำการ Redirect กลับไปยังหน้า Frontend ด้วยสถานะ 302 พร้อมทั้งส่ง token และตัวระบุ Authenticator ไปในพารามิเตอร์ URL ในรูปแบบ ?authenticator=xxx&token=yyy ครับ/ค่ะ
ถัดไป เราจะมาดูวิธีการลงทะเบียนอินเทอร์เฟซฝั่งเซิร์ฟเวอร์และส่วนติดต่อผู้ใช้ฝั่งไคลเอนต์กันครับ/ค่ะ
NocoBase Kernel มีฟังก์ชันสำหรับการลงทะเบียนและจัดการประเภทการยืนยันตัวตนที่ขยายเพิ่มเติมได้ครับ/ค่ะ การประมวลผลตรรกะหลักของการขยายปลั๊กอินการเข้าสู่ระบบนั้น จำเป็นต้องสืบทอด (inherit) คลาส Abstract Auth ของ Kernel และทำการ implements อินเทอร์เฟซมาตรฐานที่เกี่ยวข้องครับ/ค่ะ
สำหรับ API ฉบับเต็ม โปรดดูที่ Auth ครับ/ค่ะ
Kernel ยังได้ลงทะเบียนการดำเนินการทรัพยากรพื้นฐานที่เกี่ยวข้องกับการยืนยันตัวตนของผู้ใช้ไว้ด้วยครับ/ค่ะ
| API | คำอธิบาย |
|---|---|
auth:check | ตรวจสอบว่าผู้ใช้เข้าสู่ระบบอยู่หรือไม่ |
auth:signIn | เข้าสู่ระบบ |
auth:signUp | ลงทะเบียน |
auth:signOut | ออกจากระบบ |
ในกรณีส่วนใหญ่ ประเภทการยืนยันตัวตนของผู้ใช้ที่ขยายเพิ่มเติมสามารถใช้ตรรกะการตรวจสอบสิทธิ์ JWT ที่มีอยู่เดิมเพื่อสร้างข้อมูลรับรองสำหรับการเข้าถึง API ของผู้ใช้ได้ครับ/ค่ะ คลาส BaseAuth ของ Kernel ได้ทำการ implements พื้นฐานของคลาส Abstract Auth ไว้แล้ว โปรดดูที่ BaseAuth ครับ/ค่ะ ปลั๊กอินสามารถสืบทอดคลาส BaseAuth ได้โดยตรง เพื่อนำโค้ดตรรกะบางส่วนกลับมาใช้ใหม่ และลดต้นทุนการพัฒนาครับ/ค่ะ
ในการ implements ตรรกะการยืนยันตัวตนของผู้ใช้ มักจะเกี่ยวข้องกับการจัดการข้อมูลผู้ใช้ครับ/ค่ะ ในแอปพลิเคชัน NocoBase คอลเลกชันที่เกี่ยวข้องจะถูกกำหนดไว้โดยค่าเริ่มต้นดังนี้ครับ/ค่ะ
| คอลเลกชัน | หน้าที่ | ปลั๊กอิน |
|---|---|---|
users | จัดเก็บข้อมูลผู้ใช้ เช่น อีเมล ชื่อเล่น และรหัสผ่าน | ปลั๊กอินผู้ใช้ (@nocobase/plugin-users) |
authenticators | จัดเก็บข้อมูล Authenticator (เอนทิตีประเภทการยืนยันตัวตน) ซึ่งสอดคล้องกับประเภทการยืนยันตัวตนและการตั้งค่า | ปลั๊กอินการยืนยันตัวตนผู้ใช้ (@nocobase/plugin-auth) |
usersAuthenticators | เชื่อมโยงผู้ใช้กับ Authenticator และบันทึกข้อมูลผู้ใช้ภายใต้ Authenticator ที่เกี่ยวข้อง | ปลั๊กอินการยืนยันตัวตนผู้ใช้ (@nocobase/plugin-auth) |
โดยทั่วไปแล้ว วิธีการเข้าสู่ระบบที่ขยายเพิ่มเติมสามารถใช้ users และ usersAuthenticators เพื่อจัดเก็บข้อมูลผู้ใช้ที่เกี่ยวข้องได้เลยครับ/ค่ะ จะมีเพียงกรณีพิเศษเท่านั้นที่จำเป็นต้องเพิ่มคอลเลกชันใหม่ด้วยตนเอง
ฟิลด์หลักของ usersAuthenticators มีดังนี้ครับ/ค่ะ
| ฟิลด์ | คำอธิบาย |
|---|---|
uuid | ตัวระบุเฉพาะของผู้ใช้สำหรับวิธีการยืนยันตัวตนประเภทนี้ เช่น หมายเลขโทรศัพท์ หรือ WeChat OpenID เป็นต้น |
meta | ฟิลด์ JSON สำหรับข้อมูลอื่น ๆ ที่ต้องการบันทึก |
userId | ID ผู้ใช้ |
authenticator | ชื่อ Authenticator (ตัวระบุเฉพาะ) |
สำหรับการดำเนินการค้นหาและสร้างผู้ใช้ AuthModel ซึ่งเป็นโมเดลข้อมูลของ authenticators ได้มีการห่อหุ้ม (encapsulate) เมธอดหลายตัวไว้ ซึ่งสามารถเรียกใช้ได้ในคลาส CustomAuth ผ่าน this.authenticator[ชื่อเมธอด] ครับ/ค่ะ สำหรับ API ฉบับเต็ม โปรดดูที่ AuthModel ครับ/ค่ะ
วิธีการยืนยันตัวตนที่ขยายเพิ่มเติมจำเป็นต้องลงทะเบียนกับโมดูลการจัดการการยืนยันตัวตนครับ/ค่ะ
ส่วนติดต่อผู้ใช้ฝั่งไคลเอนต์จะถูกลงทะเบียนผ่านอินเทอร์เฟซ registerType ที่ปลั๊กอินการยืนยันตัวตนผู้ใช้ฝั่งไคลเอนต์จัดหาให้ครับ/ค่ะ

หากมี Authenticator หลายตัวที่สอดคล้องกับประเภทการยืนยันตัวตนและได้ลงทะเบียนฟอร์มเข้าสู่ระบบไว้ ฟอร์มเหล่านั้นจะแสดงผลในรูปแบบของ Tab ครับ/ค่ะ ชื่อ Tab จะเป็นชื่อ Authenticator ที่กำหนดค่าไว้ในส่วน Backend ครับ/ค่ะ


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

หากต้องการเปลี่ยนจากหน้าเข้าสู่ระบบไปยังหน้าลงทะเบียน คุณจะต้องจัดการส่วนนี้ด้วยตนเองในคอมโพเนนต์การเข้าสู่ระบบครับ/ค่ะ

ส่วนด้านบนเป็นการกำหนดค่า Authenticator ทั่วไป ส่วนด้านล่างเป็นส่วนของฟอร์มการกำหนดค่าแบบกำหนดเองที่สามารถลงทะเบียนได้ครับ/ค่ะ
ในการเรียกใช้ API ที่เกี่ยวข้องกับการยืนยันตัวตนของผู้ใช้จากฝั่งไคลเอนต์ คุณสามารถใช้ SDK ที่ NocoBase จัดหาให้ได้ครับ/ค่ะ
สำหรับรายละเอียด API โปรดดูที่ @nocobase/sdk - Auth ครับ/ค่ะ