Keycloak เป็น Identity and Access Management (IAM) Solution ที่ทรงพลัง มีฟีเจอร์มากมาย เราจะมาเรียนรู้ส่วนหลักๆ ที่จำเป็นสำหรับการเริ่มต้นใช้งานกันครับ
โครงสร้างหลักใน Keycloak: Realm
หลังจากที่คุณล็อกอินเข้ามา สิ่งแรกที่คุณจะเห็นคือ Master Realm
- Realm (รีล์ม): คือโดเมนความปลอดภัยที่แยกออกจากกันโดยสมบูรณ์ใน Keycloak
- แต่ละ Realm มีผู้ใช้, กลุ่ม, บทบาท (Roles), ไคลเอ็นต์ (Clients) และการตั้งค่าของตัวเอง
MasterRealm ใช้สำหรับจัดการ Keycloak เอง (เช่น การสร้าง Realm ใหม่)- หลักปฏิบัติที่ดี: ไม่ควรใช้
MasterRealm สำหรับแอปพลิเคชันของคุณ ควรสร้าง Realm ใหม่สำหรับแต่ละแอปพลิเคชันหรือแต่ละสภาพแวดล้อม (เช่น Development, Staging, Production) เพื่อให้การจัดการแยกกันอย่างชัดเจนและปลอดภัย
การสร้าง Realm ใหม่
- ที่มุมซ้ายบนของหน้าจอ Admin Console คุณจะเห็นดรอปดาวน์ที่แสดง
Master - คลิกที่ดรอปดาวน์นั้น แล้วเลือก “Create realm”
- ใส่ Name สำหรับ Realm ของคุณ (เช่น
MyApplicationRealmหรือMyCompanyRealm) - คลิก “Create”
- หลังจากสร้าง Realm ใหม่แล้ว Keycloak จะสลับไปยัง Realm นั้นโดยอัตโนมัติ คุณจะเห็นชื่อ Realm ที่คุณสร้างขึ้นในดรอปดาวน์
องค์ประกอบสำคัญใน Realm
ในแต่ละ Realm มีองค์ประกอบหลักๆ ที่คุณต้องทำความเข้าใจและตั้งค่า:
1. Users (ผู้ใช้)
คือผู้ที่เข้าถึงแอปพลิเคชันของคุณ
การสร้างผู้ใช้ใหม่:
- ในเมนูด้านซ้าย เลือก “Users”
- คลิกปุ่ม “Create new user”
- กรอกข้อมูลที่จำเป็น:
- Username: ชื่อผู้ใช้สำหรับล็อกอิน
- Email: อีเมลของผู้ใช้
- First Name, Last Name: (Optional) ชื่อจริงและนามสกุล
- คลิก “Create”
- หลังจากสร้างผู้ใช้แล้ว คุณจะถูกนำไปยังหน้ารายละเอียดผู้ใช้ ไปที่แท็บ “Credentials”
- ตั้งรหัสผ่านสำหรับผู้ใช้:
- ใส่รหัสผ่านในช่อง “New password” และ “Password confirmation”
- Temporary: ถ้าติ๊กช่องนี้ ผู้ใช้จะต้องเปลี่ยนรหัสผ่านเมื่อล็อกอินครั้งแรก (แนะนำสำหรับการสร้างผู้ใช้ใหม่)
- คลิก “Set password”
2. Roles (บทบาท)
คือชุดของสิทธิ์ที่สามารถกำหนดให้กับผู้ใช้หรือกลุ่มได้ เพื่อควบคุมว่าผู้ใช้สามารถทำอะไรได้บ้างในแอปพลิเคชันของคุณ
มี 2 ประเภทหลักๆ:
- Realm Roles: บทบาทที่ใช้ได้กับผู้ใช้ทั้งหมดใน Realm นั้นๆ
- Client Roles: บทบาทที่เฉพาะเจาะจงสำหรับ Client (แอปพลิเคชัน) หนึ่งๆ
การสร้าง Realm Role:
- ในเมนูด้านซ้าย เลือก “Realm roles”
- คลิกปุ่ม “Create role”
- ใส่ Role Name (เช่น
admin,user,manager) - คลิก “Create”
การกำหนด Role ให้ผู้ใช้:
- ไปที่ “Users”
- คลิกที่ผู้ใช้ที่คุณต้องการกำหนด Role
- ไปที่แท็บ “Role mapping”
- ในส่วน “Available roles” คุณจะเห็น Realm Roles ที่คุณสร้างไว้
- เลือก Role ที่ต้องการ แล้วคลิกปุ่ม “Add selected” Role นั้นจะถูกย้ายไปที่ “Assigned roles”
3. Clients (ไคลเอ็นต์)
คือแอปพลิเคชันของคุณที่ต้องการใช้ Keycloak ในการยืนยันตัวตนผู้ใช้ ตัวอย่างเช่น เว็บไซต์, โมบายล์แอป, หรือบริการ API Backend
การสร้าง Client ใหม่:
- ในเมนูด้านซ้าย เลือก “Clients”
- คลิกปุ่ม “Create client”
- กรอกข้อมูลสำคัญ:
- Client ID: ชื่อสำหรับ Client ของคุณ (เช่น
my-web-app,my-mobile-app) - Client authentication:
- On: หาก Client ของคุณเป็น Confidential Client (เช่น Web Application) ที่ต้องเก็บ Secret ได้
- Off: หาก Client ของคุณเป็น Public Client (เช่น Mobile App, SPA) ที่ไม่สามารถเก็บ Secret ได้ปลอดภัย
- Authentication flow: ควรเลือก Flow ที่เหมาะสม (เช่น Standard Flow สำหรับ Web Apps)
- Valid redirect URIs: URI ที่ Keycloak จะอนุญาตให้ผู้ใช้ถูก Redirect กลับไปหลังจากล็อกอินสำเร็จ (สำคัญมากสำหรับความปลอดภัย!)
- เช่น
http://localhost:3000/*สำหรับการพัฒนา - ใช้
*เพื่ออนุญาตทุก Subpath ภายใต้ URI นั้น
- เช่น
- Web origins: Origins ที่อนุญาตให้ JavaScript ของคุณเรียกใช้ Keycloak (สำหรับ CORS)
- เช่น
http://localhost:3000
- เช่น
- Client ID: ชื่อสำหรับ Client ของคุณ (เช่น
- คลิก “Save”
การตั้งค่า Client เพิ่มเติม (สำคัญสำหรับ Confidential Clients):
- หลังจากสร้าง Client แล้ว ไปที่แท็บ “Credentials”
- คุณจะเห็น “Client Secret” ที่นี่ นี่คือ Secret ของ Client ของคุณ ห้ามเปิดเผยให้ผู้อื่นรู้! แอปพลิเคชันของคุณจะต้องใช้ Client Secret นี้ในการแลกเปลี่ยน Token กับ Keycloak
4. Authentication (การยืนยันตัวตน)
Keycloak มี Flow สำหรับการยืนยันตัวตนที่หลากหลาย คุณสามารถปรับแต่งได้ในส่วน “Authentication”
- Flows: กำหนดขั้นตอนการล็อกอิน, การลงทะเบียน, การรีเซ็ตรหัสผ่าน ฯลฯ คุณสามารถสร้าง Flow ของตัวเองได้
- Required Actions: การดำเนินการที่ผู้ใช้ต้องทำหลังจากล็อกอินครั้งแรก (เช่น ตั้งรหัสผ่านใหม่, ตรวจสอบอีเมล)
การเชื่อมต่อแอปพลิเคชันกับ Keycloak (ภาพรวม)
หลังจากตั้งค่า Realm, Users, Roles และ Clients ใน Keycloak แล้ว ขั้นตอนต่อไปคือการเชื่อมต่อแอปพลิเคชันของคุณเข้ากับ Keycloak
โดยทั่วไปแล้ว แอปพลิเคชันจะใช้ไลบรารีหรือ SDK ของ Keycloak หรือโปรโตคอลมาตรฐานเช่น OpenID Connect (OIDC) หรือ OAuth 2.0 เพื่อสื่อสารกับ Keycloak
ขั้นตอนทั่วไป:
- รวมไลบรารี/SDK ของ Keycloak: ภาษาและ Framework ยอดนิยมมักจะมีไลบรารีสำหรับ Keycloak/OIDC อยู่แล้ว (เช่น Keycloak.js สำหรับ JavaScript, Keycloak Spring Boot Adapter สำหรับ Java Spring Boot)
- กำหนดค่าการเชื่อมต่อ:
- Keycloak URL:
http://localhost:8080(หรือ URL ของ Keycloak Server ของคุณ) - Realm Name: ชื่อ Realm ที่คุณสร้างขึ้น (เช่น
MyApplicationRealm) - Client ID: ID ของ Client ที่คุณสร้างขึ้น
- Client Secret: (สำหรับ Confidential Clients) Secret ของ Client
- Keycloak URL:
- นำ Logic การล็อกอิน/ล็อกเอาท์ไปใช้: ใช้ฟังก์ชันจากไลบรารี/SDK เพื่อ redirect ผู้ใช้ไปยัง Keycloak สำหรับการล็อกอิน และจัดการ Token ที่ Keycloak ส่งกลับมา
- ใช้ Token เพื่อเข้าถึงข้อมูล: เมื่อผู้ใช้ล็อกอินสำเร็จ Keycloak จะให้ Access Token ซึ่งแอปพลิเคชันของคุณจะใช้ในการส่งไปยัง API Backend เพื่อยืนยันตัวตนและตรวจสอบสิทธิ์
สิ่งที่ควรทำต่อไป
- ศึกษาโปรโตคอล OpenID Connect (OIDC) และ OAuth 2.0: Keycloak ใช้โปรโตคอลเหล่านี้เป็นหลัก การเข้าใจจะช่วยให้คุณใช้งาน Keycloak ได้อย่างมีประสิทธิภาพมากขึ้น
- ลองใช้งาน Keycloak Adapters/SDKs สำหรับภาษา/Framework ที่คุณใช้: Keycloak มี Adapters สำหรับภาษาและ Framework ยอดนิยมมากมาย (เช่น Java Spring Boot, Node.js, React, Angular)
- การจัดการกลุ่ม (Groups): คุณสามารถจัดกลุ่มผู้ใช้และกำหนด Role ให้กับกลุ่มได้ ซึ่งช่วยลดความซับซ้อนในการจัดการ Role ของผู้ใช้จำนวนมาก
- การตั้งค่า User Federation: หากคุณมีระบบผู้ใช้อยู่แล้ว (เช่น LDAP, Active Directory) คุณสามารถเชื่อมต่อ Keycloak เข้ากับระบบเหล่านั้นได้
- การตั้งค่า Identity Providers (IdP): อนุญาตให้ผู้ใช้ล็อกอินด้วยบัญชีจากผู้ให้บริการภายนอก เช่น Google, Facebook, GitHub
- การปรับแต่ง Themes: เปลี่ยนรูปลักษณ์ของหน้าล็อกอิน, ลงทะเบียน, และบัญชีผู้ใช้ใน Keycloak ให้เข้ากับแบรนด์ของคุณ