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

คนไม่ใช่สิ่งทดแทนกันได้ (People are not Fungible)

คนไม่ใช่สิ่งทดแทนกันได้ (People are not Fungible)

ในปี 2546 นักศึกษาคณะวิทยาศาสตร์ที่เรียนอยู่ที่ศูนย์รังสิตมาตลอดแบบผม ได้มีโอกาสเข้าเมืองไปเรียนที่ธรรมศาสตร์ ท่าพระจันทร์ เป็นครั้งแรก นอกจากจะตื่นตาตื่นใจกับของอร่อยมากมายรอบมหาวิทยาลัยแล้ว บรรยากาศที่ศูนย์ท่าพระจันทร์มันมีมนต์ขลังแปลก ๆ ตัวผมได้

By Chokchai
ทำไม System Analyst ถึงไม่เชื่อ Design จากทีม

ทำไม System Analyst ถึงไม่เชื่อ Design จากทีม

บ่อยครั้งที่ผมได้ยินน้อง ๆ ออดส์ทีม (ODT) เล่าว่า งานที่ทำอยู่ไม่ท้าทายเลย เพราะเพียงได้รับ Specification มาจาก System Analyst (SA) หรือ Tech Lead ที่เป็นพนักงาน แล้วน้องก็มีหน้าที่เขียนโค้ดตามนั้นไปอย่างเดียว บ่

By Chokchai
เวลาอู้

เวลาอู้

ผมกำลังอ่านหนังสือ Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency ของ Tom DeMarco ซึ่งได้ให้มุมมองใหม่เกี่ยวกับ Slack time หรือเวลาอู้งานกับผม แต่ก่อนจะเล่าว่าผมเห็นอะไร ผมของแบ่งปันมุมมองเวลาผมดูองค์กรก่อนนะ สายการผลิต คนในองค์กรมารวมตั

By Chokchai