Keycloak คืออะไร?

Keycloak เป็น Identity and Access Management (IAM) Solution ที่ทรงพลัง มีฟีเจอร์มากมาย เราจะมาเรียนรู้ส่วนหลักๆ ที่จำเป็นสำหรับการเริ่มต้นใช้งานกันครับ


โครงสร้างหลักใน Keycloak: Realm

หลังจากที่คุณล็อกอินเข้ามา สิ่งแรกที่คุณจะเห็นคือ Master Realm

  • Realm (รีล์ม): คือโดเมนความปลอดภัยที่แยกออกจากกันโดยสมบูรณ์ใน Keycloak
    • แต่ละ Realm มีผู้ใช้, กลุ่ม, บทบาท (Roles), ไคลเอ็นต์ (Clients) และการตั้งค่าของตัวเอง
    • Master Realm ใช้สำหรับจัดการ Keycloak เอง (เช่น การสร้าง Realm ใหม่)
    • หลักปฏิบัติที่ดี: ไม่ควรใช้ Master Realm สำหรับแอปพลิเคชันของคุณ ควรสร้าง Realm ใหม่สำหรับแต่ละแอปพลิเคชันหรือแต่ละสภาพแวดล้อม (เช่น Development, Staging, Production) เพื่อให้การจัดการแยกกันอย่างชัดเจนและปลอดภัย

การสร้าง Realm ใหม่

  1. ที่มุมซ้ายบนของหน้าจอ Admin Console คุณจะเห็นดรอปดาวน์ที่แสดง Master
  2. คลิกที่ดรอปดาวน์นั้น แล้วเลือก “Create realm”
  3. ใส่ Name สำหรับ Realm ของคุณ (เช่น MyApplicationRealm หรือ MyCompanyRealm)
  4. คลิก “Create”
  5. หลังจากสร้าง Realm ใหม่แล้ว Keycloak จะสลับไปยัง Realm นั้นโดยอัตโนมัติ คุณจะเห็นชื่อ Realm ที่คุณสร้างขึ้นในดรอปดาวน์

องค์ประกอบสำคัญใน Realm

ในแต่ละ Realm มีองค์ประกอบหลักๆ ที่คุณต้องทำความเข้าใจและตั้งค่า:

1. Users (ผู้ใช้)

คือผู้ที่เข้าถึงแอปพลิเคชันของคุณ

การสร้างผู้ใช้ใหม่:

  1. ในเมนูด้านซ้าย เลือก “Users”
  2. คลิกปุ่ม “Create new user”
  3. กรอกข้อมูลที่จำเป็น:
    • Username: ชื่อผู้ใช้สำหรับล็อกอิน
    • Email: อีเมลของผู้ใช้
    • First Name, Last Name: (Optional) ชื่อจริงและนามสกุล
  4. คลิก “Create”
  5. หลังจากสร้างผู้ใช้แล้ว คุณจะถูกนำไปยังหน้ารายละเอียดผู้ใช้ ไปที่แท็บ “Credentials”
  6. ตั้งรหัสผ่านสำหรับผู้ใช้:
    • ใส่รหัสผ่านในช่อง “New password” และ “Password confirmation”
    • Temporary: ถ้าติ๊กช่องนี้ ผู้ใช้จะต้องเปลี่ยนรหัสผ่านเมื่อล็อกอินครั้งแรก (แนะนำสำหรับการสร้างผู้ใช้ใหม่)
    • คลิก “Set password”

2. Roles (บทบาท)

คือชุดของสิทธิ์ที่สามารถกำหนดให้กับผู้ใช้หรือกลุ่มได้ เพื่อควบคุมว่าผู้ใช้สามารถทำอะไรได้บ้างในแอปพลิเคชันของคุณ

มี 2 ประเภทหลักๆ:

  • Realm Roles: บทบาทที่ใช้ได้กับผู้ใช้ทั้งหมดใน Realm นั้นๆ
  • Client Roles: บทบาทที่เฉพาะเจาะจงสำหรับ Client (แอปพลิเคชัน) หนึ่งๆ

การสร้าง Realm Role:

  1. ในเมนูด้านซ้าย เลือก “Realm roles”
  2. คลิกปุ่ม “Create role”
  3. ใส่ Role Name (เช่น admin, user, manager)
  4. คลิก “Create”

การกำหนด Role ให้ผู้ใช้:

  1. ไปที่ “Users”
  2. คลิกที่ผู้ใช้ที่คุณต้องการกำหนด Role
  3. ไปที่แท็บ “Role mapping”
  4. ในส่วน “Available roles” คุณจะเห็น Realm Roles ที่คุณสร้างไว้
  5. เลือก Role ที่ต้องการ แล้วคลิกปุ่ม “Add selected” Role นั้นจะถูกย้ายไปที่ “Assigned roles”

3. Clients (ไคลเอ็นต์)

คือแอปพลิเคชันของคุณที่ต้องการใช้ Keycloak ในการยืนยันตัวตนผู้ใช้ ตัวอย่างเช่น เว็บไซต์, โมบายล์แอป, หรือบริการ API Backend

การสร้าง Client ใหม่:

  1. ในเมนูด้านซ้าย เลือก “Clients”
  2. คลิกปุ่ม “Create client”
  3. กรอกข้อมูลสำคัญ:
    • 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
  4. คลิก “Save”

การตั้งค่า Client เพิ่มเติม (สำคัญสำหรับ Confidential Clients):

  1. หลังจากสร้าง Client แล้ว ไปที่แท็บ “Credentials”
  2. คุณจะเห็น “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

ขั้นตอนทั่วไป:

  1. รวมไลบรารี/SDK ของ Keycloak: ภาษาและ Framework ยอดนิยมมักจะมีไลบรารีสำหรับ Keycloak/OIDC อยู่แล้ว (เช่น Keycloak.js สำหรับ JavaScript, Keycloak Spring Boot Adapter สำหรับ Java Spring Boot)
  2. กำหนดค่าการเชื่อมต่อ:
    • Keycloak URL: http://localhost:8080 (หรือ URL ของ Keycloak Server ของคุณ)
    • Realm Name: ชื่อ Realm ที่คุณสร้างขึ้น (เช่น MyApplicationRealm)
    • Client ID: ID ของ Client ที่คุณสร้างขึ้น
    • Client Secret: (สำหรับ Confidential Clients) Secret ของ Client
  3. นำ Logic การล็อกอิน/ล็อกเอาท์ไปใช้: ใช้ฟังก์ชันจากไลบรารี/SDK เพื่อ redirect ผู้ใช้ไปยัง Keycloak สำหรับการล็อกอิน และจัดการ Token ที่ Keycloak ส่งกลับมา
  4. ใช้ 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 ให้เข้ากับแบรนด์ของคุณ
Scroll to Top