นโยบายรหัสผ่าน
Logto ใช้นโยบายรหัสผ่านในรูปแบบที่แตกต่างกัน ขึ้นอยู่กับวิธีที่รหัสผ่านถูกสร้างหรืออัปเดต:
- กระบวนการสำหรับผู้ใช้ปลายทาง เช่น ประสบการณ์การลงชื่อเข้าใช้สำเร็จรูป, Experience API, และ Account API จะบังคับใช้นโยบายรหัสผ่านปัจจุบันเสมอ ดูรายละเอียดที่ ตั้งค่านโยบายรหัสผ่าน
- การดำเนินการของผู้ดูแลระบบผ่าน Management API
patch /api/users/{userId}/passwordจะได้รับการยกเว้น ทำให้คุณสามารถจัดเตรียมหรือรีเซ็ตรหัสผ่านโดยไม่ต้องตรวจสอบนโยบายเมื่อจำเป็น - หากต้องการตรวจสอบรหัสผ่านที่มีอยู่กับกฎปัจจุบัน ให้เรียก
POST /api/sign-in-exp/default/check-passwordและดำเนินการตามผลการตรวจสอบ อ่าน การตรวจสอบความสอดคล้องของรหัสผ่าน เพื่อเรียนรู้เพิ่มเติม
ตั้งค่านโยบายรหัสผ่าน
สำหรับผู้ใช้ใหม่หรือผู้ใช้ที่กำลังอัปเดตรหัสผ่าน คุณสามารถตั้งนโยบายรหัสผ่านเพื่อบังคับใช้ข้อกำหนดความแข็งแรงของรหัสผ่านได้ ไปที่ Console > Security > Password policy เพื่อกำหนดค่านโยบายรหัสผ่าน
- ความยาวรหัสผ่านขั้นต่ำ: กำหนดจำนวนอักขระขั้นต่ำที่ต้องใช้ในรหัสผ่าน (NIST แนะนำให้ใช้ไม่น้อยกว่า 8 อักขระ)
- ประเภทอักขระขั้นต่ำที่ต้องมี: กำหนดจำนวนประเภทอักขระขั้นต่ำที่ต้องมีในรหัสผ่าน ประเภทอักขระที่มีให้เลือก ได้แก่:
- ตัวอักษรตัวพิมพ์ใหญ่:
(A-Z) - ตัวอักษรตัวพิมพ์เล็ก:
(a-z) - ตัวเลข:
(0-9) - อักขระพิเศษ:
(!"#$%&'()\*+,-./:;<>=?@[]^\_`|{}~ )
- ตัวอักษรตัวพิมพ์ใหญ่:
- ตรวจสอบประวัติการรั่วไหล: เปิดใช้งานการตั้งค่านี้เพื่อปฏิเสธรหัสผ่านที่เคยถูกเปิดเผยในเหตุการณ์ข้อมูลรั่วไหล (ขับเคลื่อนโดย Have I Been Pwned)
- ตรวจสอบการซ้ำซ้อน: เปิดใช้งานการตั้งค่านี้เพื่อปฏิเสธรหัสผ่านที่มีอักขระซ้ำกัน (เช่น "11111111" หรือ "password123")
- ตรวจสอบข้อมูลผู้ใช้: เปิดใช้งานการตั้งค่านี้เพื่อปฏิเสธรหัสผ่านที่มีข้อมูลผู้ใช้ เช่น ชื่อผู้ใช้ อีเมล หรือหมายเลขโทรศัพท์
- คำที่กำหนดเอง: ระบุรายการคำที่ต้องการปฏิเสธในรหัสผ่าน (ไม่สนใจตัวพิมพ์ใหญ่/เล็ก)
การหมดอายุของรหัสผ่าน
การหมดอายุของรหัสผ่านจะบังคับให้ผู้ใช้ต้องรีเซ็ตรหัสผ่านหลังจากครบจำนวนวันที่กำหนด คุณยังสามารถทำให้รหัสผ่านของผู้ใช้รายใดหมดอายุได้ด้วยตนเอง เช่น เมื่อทราบว่ารหัสผ่านนั้นถูกเปิดเผย
นโยบายนี้จะถูกตรวจสอบหลังจากผู้ใช้กรอกรหัสผ่านถูกต้องในหน้าลงชื่อเข้าใช้ด้วยรหัสผ่านเท่านั้น ผู้ใช้ที่ลงชื่อเข้าใช้ด้วยรหัสยืนยัน การเข้าสู่ระบบโซเชียล SSO หรือ passkey จะไม่ได้รับผลกระทบ
เปิดใช้งานการหมดอายุของรหัสผ่าน
ไปที่ Console > Security > Password policy แล้วค้นหาการ์ด Password expiration:
- เปิด Enable password expiration
- กำหนด Password valid period (days) ระหว่าง 1 ถึง 9999 วัน
- บันทึกการเปลี่ยนแปลง
สวิตช์จะยังไม่สามารถเปิดใช้งานได้จนกว่าประสบการณ์การลงชื่อเข้าใช้จะมีวิธี ลืมรหัสผ่าน อย่างน้อยหนึ่งวิธี (อีเมลหรือโทรศัพท์) ที่มีตัวเชื่อมต่อที่ใช้งานได้ เนื่องจากผู้ใช้สามารถรีเซ็ตรหัสผ่านที่หมดอายุได้ผ่านกระบวนการนี้เท่านั้น ด้วยเหตุผลเดียวกัน ขณะที่นโยบายนี้เปิดใช้งานอยู่ คุณจะไม่สามารถลบตัวเชื่อมต่ออีเมลหรือ SMS ตัวสุดท้ายที่รองรับลืมรหัสผ่านได้ หากการสมัครของคุณไม่บังคับใช้อีเมลหรือหมายเลขโทรศัพท์ ผู้ใช้บางรายอาจไม่มีวิธีรับรหัสรีเซ็ต ดังนั้นควรพิจารณาเก็บข้อมูลนี้ตั้งแต่สมัคร
Logto จะบันทึกเวลาที่รหัสผ่านของผู้ใช้ถูกตั้งค่าหรือเปลี่ยนแปลงครั้งล่าสุด เมื่อรหัสผ่านนั้นมีอายุเท่ากับระยะเวลาที่กำหนด การลงชื่อเข้าใช้ด้วยรหัสผ่านครั้งถัดไปของผู้ใช้จะถูกบล็อกจนกว่าจะรีเซ็ตรหัสผ่าน ผู้ใช้ที่ไม่มีวันที่เปลี่ยนรหัสผ่านจะนับจากเวลาที่คุณเปิดใช้งานนโยบายนี้ ดังนั้นการเปิดใช้งานจะไม่ทำให้รหัสผ่านของทุกคนหมดอายุพร้อมกัน การปิดและเปิดนโยบายใหม่จะรีเซ็ตเวลาเริ่มต้นนี้
เมื่อผู้ใช้ตั้งรหัสผ่านใหม่ ไม่ว่าจะผ่านลืมรหัสผ่าน, Account API หรือ Management API อายุของรหัสผ่านจะเริ่มนับใหม่และการหมดอายุแบบกำหนดเองจะถูกล้าง
ทำให้รหัสผ่านของผู้ใช้หมดอายุด้วยตนเอง
เมื่อเปิดใช้งานนโยบายการหมดอายุของรหัสผ่านแล้ว คุณสามารถบังคับให้ผู้ใช้รายใดรีเซ็ตรหัสผ่านในการลงชื่อเข้าใช้ครั้งถัดไปได้:
-
Console: ไปที่ Console > User management เปิดหน้ารายละเอียดผู้ใช้ แล้วคลิก Expire ข้างรหัสผ่านของผู้ใช้ จากนั้นยืนยันการดำเนินการ ปุ่มนี้จะแสดงเฉพาะเมื่อผู้ใช้มีรหัสผ่าน
-
Management API: เรียก
PATCH /api/users/{userId}/password/expirationพร้อม body ดังนี้:{"isExpired": true}
หากนโยบายยังไม่เปิดใช้งาน API จะคืนค่า 400 พร้อม error code sign_in_experiences.password_expiration_not_enabled และปุ่ม Expire ใน Console จะถูกปิดใช้งาน
กรณีที่พบบ่อยคือรหัสผ่านที่ทราบว่าถูกเปิดเผย การหมดอายุจะบังคับให้ผู้ใช้พิสูจน์ความเป็นเจ้าของอีเมลหรือหมายเลขโทรศัพท์ด้วยรหัสยืนยันก่อนจะตั้งรหัสผ่านใหม่และลงชื่อเข้าใช้ได้อีกครั้ง หากคุณต้องการหมดอายุรหัสผ่านด้วยตนเองเท่านั้นและไม่ต้องการบังคับให้ผู้ใช้ทุกคนเปลี่ยนรหัสผ่านเป็นประจำ ให้เปิดใช้งานนโยบายนี้โดยกำหนดระยะเวลานาน เช่น 3650 วัน
การหมดอายุของรหัสผ่านจะไม่ทำให้ผู้ใช้ออกจากเซสชันที่มีอยู่ หากต้องการตัดสิทธิ์การเข้าถึงทันที ให้ เพิกถอนเซสชันที่ใช้งานอยู่ของผู้ใช้ และ แอปของบุคคลที่สามที่ได้รับอนุญาต ด้วย
สิ่งที่ผู้ใช้ปลายทางจะเห็น
เมื่อผู้ใช้ลงชื่อเข้าใช้ด้วยรหัสผ่านที่หมดอายุ หลังจากกรอกรหัสผ่านถูกต้องแล้ว หน้าลงชื่อเข้าใช้จะแสดงโมดัลพร้อมข้อความว่า "รหัสผ่านของคุณหมดอายุและต้องรีเซ็ตก่อนจึงจะลงชื่อเข้าใช้ได้" เมื่อคลิก Reset password ผู้ใช้จะเข้าสู่กระบวนการลืมรหัสผ่านโดยมีตัวระบุกรอกไว้ล่วงหน้า หลังจากยืนยันด้วยรหัสที่ส่งไปยังอีเมลหรือโทรศัพท์และตั้งรหัสผ่านใหม่แล้ว ผู้ใช้จะสามารถลงชื่อเข้าใช้ได้อีกครั้ง
หากคุณสร้าง UI ลงชื่อเข้าใช้เองด้วย Experience API คำขอตรวจสอบรหัสผ่านจะล้มเหลวพร้อม error code password.expired (HTTP 422) ให้จัดการข้อผิดพลาดนี้โดยส่งผู้ใช้ไปยัง flow รีเซ็ตรหัสผ่านของคุณ
การตรวจสอบความสอดคล้องของรหัสผ่าน
หลังจากคุณอัปเดตนโยบายรหัสผ่านใน Logto ผู้ใช้ที่มีอยู่ยังคงสามารถลงชื่อเข้าใช้ด้วยรหัสผ่านเดิมได้ จะมีเพียงบัญชีที่สร้างใหม่เท่านั้นที่ต้องปฏิบัติตามนโยบายที่อัปเดต
เพื่อบังคับใช้ความปลอดภัยที่เข้มงวดยิ่งขึ้น คุณสามารถใช้ POST /api/sign-in-exp/default/check-password API เพื่อตรวจสอบว่ารหัสผ่านของผู้ใช้ตรงตามนโยบายปัจจุบันที่กำหนดไว้ในประสบการณ์การลงชื่อเข้าใช้เริ่มต้นหรือไม่ หากไม่ตรง คุณสามารถแจ้งให้ผู้ใช้อัปเดตรหัสผ่านผ่าน flow ที่คุณกำหนดเองโดยใช้ Account API