Keycloak

Keycloak

ช่วงที่ผ่านมา ผมลองปรับระบบหนึ่งของลูกค้าจากที่ใช้ authentication ธรรมดา ให้ไปต่อกับ ระบบ keycloak แทน

keycloak มีฟีเจอร์ช่วยจัดการ authentication flow ให้กับ application เราได้ โดยที่เราไม่ต้องแก้โค้ดเราเลย แค่ให้ frontend เรา redirect ไป หน้า login ของ keycloak แล้วพอ login เสร็จ ระบบ keycloak จะส่ง access token และ ID token (ข้อมูลพื้นฐานของ user) มาให้เราเองตามมาตรฐาน OpenID Connect (OIDC) ซึ่งต่อยอดมาจาก OAuth2.0 อีกที

ตอนแรกผมพยายามแก้ frontend ให้ redirect ไป login ที่ keycloak ได้แล้ว แต่ตอนจะ redirect กลับมาที่ frontend ทำยังไงก็ไม่สำเร็จสักที

สุดท้ายเลยไปถามน้องส่งที่เคยศึกษามาก่อนให้น้องช่วยแก้ น้องก็ถามก่อนว่า

ส่ง: ตัด choice ก่อนพี่ มันผิดที่โค้ด frontend หรือที่ config ในระบบ keycloak
จั๊วะ: ไม่รู้ ทำยังไงถึงจะรู้อ่ะ

แล้วส่งก็แนะนำให้ผมไปรู้จักกับระบบทดสอบที่ keycloak เค้าเตรียมไว้ให้

source: https://www.keycloak.org/app/

พอลองทดสอบดูก็ไม่ผ่านเหมือนกัน เลยรู้แล้วว่าผิดตั้งแต่ config keycloak แล้ว เพราะผมไปกำหนดให้ client authenthication เป็น on

หน้า config ใน keycloak ที่เปิด client authenthication

มันเลยปลอดภัยเกิน default keycloak-js driver มันเลยต่อไม่ได้ เพราะตอน authorize code for application credentials มันไม่สำเร็จ เพราะไม่ได้ส่ง client secrets ตามไปด้วย

source: https://auth0.com/docs/get-started/authentication-and-authorization-flow/authorization-code-flow

วิธีทดสอบที่น้องส่งพาผมทำคือ

  1. เล่น frontend app ของผมจน redirect ไปหน้า login ของ keycloak
  2. shutdown frontend
  3. login ที่ keycloak ให้เสร็จ
  4. ตอน redirect กลับมา frontend จะตายเพราะ frontend down อยู่

ทำให้ authorization code ที่ได้กลับมายังไม่ถูกใช้ ผมเลยเอา authorize code ไปยิง postman ต่อเพื่อ debug ได้ว่าทำไมมันถึงตายจังหวะนั้น

พอปรับ config หลังบ้านให้หลวมขึ้น ก็เล่นจนจบ flow ได้สำเร็จ

ที่ผมเลือกเอาเรื่องนี้มาแบ่งปันเพราะ ในการแก้ปัญหาที่ซับซ้อน บ่อยครั้งเราต้องแบ่งปัญหาใหญ่ ๆ ออกเป็นปัญหาย่อย ๆ ก่อน เพื่อเราจะได้ดูไปทีละส่วน ๆ ได้ว่าสิ่งที่เราปรับไปนั้นช่วยให้เราเข้าใกล้เป้าหมายมากขึ้นไหม

ถ้าเราแยกปัญหาใหญ่ ๆ ไม่ออก เราจะทำความเข้าใจ feedback ที่เราได้รับยากมากเลย โดยเฉพาะ feedback นั้นมีตัวแปรที่เรามองไม่เห็นมาประกอบในผลลัพธ์ด้วย ทำให้นึกถึงคำที่ Terry Yin เคยแบ่งปันในคอร์ส LeSS in Action ว่า

Programming is the art or doing one thing at a time — Michael Feathers

อ้างอิง

Airflow Authentication with Keycloak
ก่อนที่จะไปเล่น Keycloak เราควรมาทำความรู้จักเรื่อง OAuth กับ OpenID Connect (OIDC) กันก่อน…
Authorization Code Flow
Learn how the Authorization Code flow works and why you should use it for regular web apps.
Securing Applications and Services Guide
Edit description
Test application - Keycloak
Keycloak is an open source identity and access management solution
Introduction to Keycloak
Keycloak is an open-source identity and access management tool with a focus on modern applications such as single-page…
Integrating Keycloak with Apache Airflow
A Step-by-Step Guide to Implementing Authentication and Authorization in Apache Airflow Using Keycloak

Read more

ในวันที่เพื่อนผิดข้อตกลง

ในวันที่เพื่อนผิดข้อตกลง

หนังสือ Teamwork is an individual skill ของ Christopher Avery เป็นคลังสมบัติจริง ๆ มีหลายหลักการที่ผมเก็บสะสมมาล้วนถูกรวบรวมอยู่ในเล่มนี้ หนังสือเล่มนี้เน้นการสร้างทีมในฝัน แทนที่จะตามหาทีมในฝัน ไม่ว่าเพื่อนร่วมทีมจะเป็นยังไง หนังสื

By Chokchai
Prolonged fasting 2025

Prolonged fasting 2025

ผมตื่นมาเช้านี้ รู้สึกเลยว่าหมดแรง ลองพยายามกำมือแน่น ๆ แต่กำไม่ไหวเลย เรี่ยวแรงมันน้อยไปหมด ลุกขึ้นช้า ๆ หลังปรับความดันได้ ก็ลองไปชั่งน้ำหนัก ลงไปอีก 0.35 กิโลจากเมื่อวาน ลองวัดความดันดู ความดันปรกติ 115/75 ค่อย ๆ พาตั

By Chokchai
ชีวิต

ชีวิต

ผมกำลังพยายามทำ prolonged fasting (อดอาหาร 72 ชั่วโมง) ครั้งแรกในชีวิต ณ ตอนนี้เป็นชั่วโมงที่ 34 เมื่อเช้าตอนออกไปวิ่ง 5 ก.ม. ระหว่างวิ่งอยู่ก็นึกขึ้นมาได้ว่าตอนถือศีลอด (ตามหลักศาสนาอิสลาม) ซึ่งอดตั้งแต่พระอาทิตย์ขึ้นจนพระอาทิตย์ตกดิน ผมเคยคิ

By Chokchai
ประโยชน์ของการอดอาหารนาน ๆ

ประโยชน์ของการอดอาหารนาน ๆ

Prolonged fasting หลายคนอาจจะเคยได้ยินว่าการอดอาหารนาน ๆ (prolonged fasting) ช่วยให้เราเด็กลง ซึ่งฟังดูเหลือเชื่อมาก วันก่อนน้องเขยผมเล่าให้ฟังว่าหลังจากอดอาหารนาน ๆ เกิดประโยชน์อะไรขึ้นกับร่างกายบ้าง ทำให้ผมเข้าใจกลไกที่ทำให้เด็กลงมากขึ้น เลยอยากเอามาแบ่งปัน ก่อนหน้านี้ผมเคยเล่

By Chokchai