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

ความหมายของที่ซ่อนอยู่ใน Just In Time

ความหมายของที่ซ่อนอยู่ใน Just In Time

วันหนึ่ง มีเด็กน้อยคนหนึ่ง กำลังจะขึ้นเครื่องบิน เด็กน้อยร้องไห้กระจองอแง อยู่ตรง security check เพราะว่าปลาทองที่เค้าจับมาได้ 2 ตัวนั้น ไม่สามารถเอาขึ้นเครื่องได้ เพราะมีน้ำอยู่ ยิ่งเด็กร้องนาน พ่อแม่ก็ยิ่งเครียด แล้วก็

By Chokchai
Boring tasks -> Purpose

Boring tasks -> Purpose

วันก่อน มีเพื่อน ScrumMaster โทรมาให้ช่วยคิดท่า retro สำหรับเติมไฟให้กับทีม (ใครอยากรู้บ้างยกมือขึ้น ^-^/) ก็เลยแชร์ที่นึกออกเร็ว ๆ ไปสองท่า หนึ่งในนั้นคือการโยงจาก boring tasks ไป purpose เริ่มจากให้สมาชิกแต่ละคนเอากระดาษ A4 แนวนอนมาแผ่นนึ

By Chokchai
ทำไมคนมีลูกถึกกันจัง?

ทำไมคนมีลูกถึกกันจัง?

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

By Chokchai
คิดบวก .. ฝึกได้

คิดบวก .. ฝึกได้

ช่วงนี้อ่านหนังสือ The happiness advantage ของ Shawn Achor อยู่ เป็นหนังสือเล่มนึงที่ชอบมาก เพราะมันทำให้ผมเห็นทั้งประโยชน์ของการมีความสุข และทักษะที่เราสามารถฝึกฝนได้ เพื่อให้แต่ละวันในชีวิตมีความสุขมากขึ้น ทักษะนึงที่จะทำให้เรามีความสุขก็คื

By Chokchai