Credentials & OTP
แท็บ Credentials
หัวข้อที่มีชื่อว่า “แท็บ Credentials”user ทุกคนใน Keycloak มีแท็บ Credentials อยู่บนหน้าโปรไฟล์ของพวกเขา นี่คือที่ที่คุณจัดการความลับสำหรับ authentication ที่ผูกกับบัญชีนั้น Keycloak รองรับ credential หลายชนิด:
- Password — credential ที่พบบ่อยที่สุด สามารถตั้งเป็นแบบถาวรหรือชั่วคราว (temporary) ได้
- OTP (One-Time Password) — second factor แบบอิงเวลา (TOTP) หรืออิงตัวนับ (HOTP) โดยทั่วไปใช้ร่วมกับแอป authenticator เช่น Google Authenticator หรือ Authy
ผู้ดูแลระบบสามารถตั้งหรือรีเซ็ต credential ในนามของ user ได้ และยังสามารถบังคับให้ user ตั้งค่า credential ด้วยตนเองในการล็อกอินครั้งถัดไปได้ด้วย
การตั้งและรีเซ็ต password
หัวข้อที่มีชื่อว่า “การตั้งและรีเซ็ต password”- ใน admin console คลิก Users ในแถบด้านซ้าย
- ค้นหาและเปิด user ที่คุณต้องการตั้งหรือรีเซ็ต password
- คลิกแท็บ Credentials
- คลิก Set password
- ใส่ password ใหม่ในช่อง Password และยืนยันใน Password confirmation
- สลับสวิตช์ Temporary ไปที่ On หากคุณต้องการบังคับให้ user เลือก password ใหม่ในครั้งถัดไปที่พวกเขาล็อกอิน ปล่อยไว้ Off เพื่อตั้ง password เป็นแบบถาวร
- คลิก Save password เพื่อยืนยัน
flag Temporary เป็นความแตกต่างที่สำคัญ: เมื่อตั้งเป็น On, Keycloak จะทำเครื่องหมาย credential ว่าต้องการการอัปเดต ครั้งถัดไปที่ user ล็อกอิน พวกเขาจะถูกเปลี่ยนเส้นทางไปยังหน้า “Please update your password” ก่อนที่จะได้รับอนุญาตให้เข้าแอปพลิเคชัน นี่คือรูปแบบที่ถูกต้องสำหรับการรีเซ็ต password ที่ริเริ่มโดย admin — ผู้ดูแลระบบไม่จำเป็นต้องรู้ password ถาวรของ user เลย
การรีเซ็ต password ผ่าน REST API
หัวข้อที่มีชื่อว่า “การรีเซ็ต password ผ่าน REST API”curl -s -X PUT -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" -d '{"type":"password","value":"TempPass123!","temporary":true}' http://localhost:8080/admin/realms/my-app/users/${USER_ID}/reset-passwordแทนที่ TOKEN ด้วย admin access token ที่ถูกต้อง และ USER_ID ด้วย UUID ของ user (มองเห็นได้ใน URL เมื่อคุณเปิด user ใน admin console) ตั้งค่า "temporary": false หากคุณต้องการให้ password เป็นแบบถาวร
การตั้งค่า OTP / 2FA
หัวข้อที่มีชื่อว่า “การตั้งค่า OTP / 2FA”Keycloak รองรับ authentication สองปัจจัยผ่าน OTP การตั้งค่า OTP สำหรับ realm หนึ่งจะถูกกำหนดแบบ global ใน admin console และ user แต่ละรายลงทะเบียนอุปกรณ์ authenticator ของตัวเองผ่าน Account Console
การตั้งค่า OTP policy สำหรับ realm
หัวข้อที่มีชื่อว่า “การตั้งค่า OTP policy สำหรับ realm”- คลิก Realm settings ในแถบด้านซ้าย
- คลิกแท็บ Authentication ในแถบนำทางด้านบน
- คลิกแท็บ OTP policy
- ตรวจสอบและปรับการตั้งค่าต่อไปนี้:
- OTP type — เลือก Time Based (TOTP) (แนะนำ; ใช้งานได้กับ Google Authenticator, Authy, และแอป authenticator ส่วนใหญ่) หรือ Counter Based (HOTP)
- OTP hash algorithm —
SHA1เป็นค่าเริ่มต้นและรองรับโดยแอป authenticator แทบทุกตัวSHA256และSHA512ให้การ hash ที่แข็งแกร่งกว่าแต่ต้องการการรองรับจากแอป - Number of digits —
6เป็นค่ามาตรฐาน; บางแอปรองรับ8 - OTP token period — สำหรับ TOTP, นี่คือจำนวนวินาทีที่แต่ละ code มีผล (ค่าเริ่มต้น:
30) - Look-ahead window — จำนวน interval ที่ Keycloak ยอมรับสำหรับความคลาดเคลื่อนของนาฬิกา (clock drift) ระหว่าง server กับอุปกรณ์ของ user
- คลิก Save
user ลงทะเบียนอุปกรณ์ OTP อย่างไร
หัวข้อที่มีชื่อว่า “user ลงทะเบียนอุปกรณ์ OTP อย่างไร”user ลงทะเบียนอุปกรณ์ OTP ของตัวเองผ่าน Keycloak Account Console:
- ไปที่ URL ของ Account Console สำหรับ realm ของคุณ:
http://localhost:8080/realms/my-app/account/ - ลงชื่อเข้าใช้ด้วย credential ของ user
- คลิก Security ในเมนูด้านซ้าย
- คลิก Two-factor authentication (หรือ Signing in ขึ้นอยู่กับเวอร์ชัน Keycloak)
- ภายใต้ Two-factor authenticators คลิก Set up authenticator application
- สแกน QR code ที่แสดงด้วยแอป authenticator (Google Authenticator, Authy, Microsoft Authenticator ฯลฯ)
- ใส่รหัส 6 หลักที่แสดงในแอปเพื่อยืนยันอุปกรณ์ แล้วคลิก Submit
ตอนนี้อุปกรณ์ได้รับการลงทะเบียนแล้ว ตั้งแต่การล็อกอินครั้งถัดไปเป็นต้นไป Keycloak จะถามรหัส OTP หลังจากขั้นตอน password เมื่อ OTP ถูกกำหนดให้จำเป็นใน authentication flow
Password policy
หัวข้อที่มีชื่อว่า “Password policy”Keycloak ให้คุณบังคับใช้กฎ password ในระดับ realm ผ่าน Password policy กฎเหล่านี้จะมีผลทุกครั้งที่ user ตั้งหรือเปลี่ยน password ของตน
วิธีตั้งค่า password policy:
- คลิก Realm settings ในแถบด้านซ้าย
- คลิกแท็บ Authentication
- คลิกแท็บ Password policy
- คลิก Add policy และเลือกจากประเภท policy ที่มี:
| Policy | สิ่งที่บังคับใช้ |
|---|---|
| Minimum length | password ต้องมีความยาวอย่างน้อย N ตัวอักษร |
| Special characters | password ต้องมีอักขระพิเศษอย่างน้อย N ตัว |
| Uppercase characters | password ต้องมีตัวอักษรพิมพ์ใหญ่อย่างน้อย N ตัว |
| Lowercase characters | password ต้องมีตัวอักษรพิมพ์เล็กอย่างน้อย N ตัว |
| Digits | password ต้องมีตัวเลขอย่างน้อย N ตัว |
| Not recently used | password ต้องไม่ตรงกับ N password ล่าสุดของ user |
| Expire password | password หมดอายุหลังจาก N วัน; user จะถูกบังคับให้เปลี่ยน |
| Password blacklist | password ต้องไม่ปรากฏในไฟล์ blacklist ที่ตั้งค่าไว้ |
- ตั้งค่าให้กับแต่ละ policy ที่คุณเพิ่ม
- คลิก Save
policy จะถูกบังคับใช้ทันทีสำหรับการเปลี่ยน password ใหม่ทั้งหมด password ที่มีอยู่ก่อนหน้า policy จะไม่ถูกทำให้ใช้ไม่ได้ย้อนหลัง — มีเพียงการตั้งหรือรีเซ็ตใหม่เท่านั้นที่จะถูกตรวจสอบ
ข้อแลกเปลี่ยน
หัวข้อที่มีชื่อว่า “ข้อแลกเปลี่ยน”| ตัวเลือก | Benefit | Cost |
|---|---|---|
| ตั้ง password เป็น Temporary เมื่อ admin รีเซ็ตให้ user | บังคับให้ user เปลี่ยน password ทันทีในการล็อกอินครั้งถัดไป admin ไม่ต้องรู้ password ถาวรของ user เลย | user ต้องผ่านขั้นตอนเปลี่ยน password เพิ่มก่อนเข้าแอปได้ ถ้าลืมจะล็อกอินไม่สำเร็จ |
| ตั้ง password เป็นแบบถาวรโดย admin (Temporary = Off) | สะดวกสำหรับ flow ที่ user ไม่สามารถเปลี่ยน password เองได้ทันที (เช่น service account) | admin รู้ password จริงของบัญชี เป็นความเสี่ยงด้านความปลอดภัย ควรใช้เท่าที่จำเป็นเท่านั้น |
| บังคับ OTP (2FA) เพิ่มจาก password | เพิ่มชั้นความปลอดภัย แม้ password รั่วผู้โจมตีก็ยังต้องมี OTP device | เพิ่มขั้นตอนให้ user ทุกครั้งที่ล็อกอิน และต้องมี fallback รองรับกรณี user ทำอุปกรณ์ authenticator หาย |
ข้อผิดพลาดที่พบบ่อย
หัวข้อที่มีชื่อว่า “ข้อผิดพลาดที่พบบ่อย”- ไม่ตั้ง password policy เลย — ปล่อยให้ user ตั้ง password อ่อนแอ เช่น สั้นเกินไปหรือไม่มีอักขระพิเศษ ควรบังคับอย่างน้อย Minimum length และ Not recently used
- รีเซ็ต password ให้ user แล้วไม่ติ๊ก Temporary — ทำให้ password ที่ admin ตั้งกลายเป็นความลับถาวรที่ admin รู้ ควรเปิด Temporary ทุกครั้งที่ตั้ง password แทน user
- เปิด OTP บังคับแต่ไม่มี fallback ที่ปลอดภัย — ถ้า user ทำอุปกรณ์ authenticator หายแล้วไม่มีกระบวนการ recovery ที่รัดกุม (เช่น ให้ admin ลบ OTP credential ผ่าน authentication อีกทาง) จะกลายเป็นช่องโหว่หรือทำให้ user ล็อกอินไม่ได้ถาวร
💡 ตัวอย่างจากของจริง
ธนาคารออนไลน์ — บังคับ OTP policy แบบ TOTP กับทุกบัญชี พร้อมตั้ง password policy ที่เข้มงวด (Minimum length, Special characters, Expire password ทุก 90 วัน) เพื่อให้เป็นไปตามมาตรฐานความปลอดภัยของอุตสาหกรรมการเงิน
ทีม IT support ขององค์กร — เวลาพนักงานลืม password จะรีเซ็ตผ่าน Admin REST API พร้อมตั้ง
"temporary": trueเสมอ เพื่อบังคับให้พนักงานตั้ง password ใหม่ของตัวเองทันทีที่ล็อกอิน โดยที่ทีม support ไม่มีทางรู้ password จริงของใครเลย