บทความนี้ชื่อว่า Keycloak คือ, SAML คือ, OAuth และ OpenID Connect คือ
Keycloak เป็นระบบการจัดการข้อมูลซึ่งพัฒนาโดย Red Hat ช่วยให้การรักษาความปลอดภัยสำหรับแอปพลิเคชันและบริการที่ทันสมัยเป็นเรื่องง่าย บลา ๆๆๆ
ก่อนจะรู้จัก Keycloak ผมอยากพาเปิดเก๊ะของโนบิตะขึ้น Timemachine ย้อนกลับไปในยุคเริ่มต้นของ IdP
2024
แนวคิดของ Identity Provider (IdP) ได้รับความนิยมอย่างสูง เพราะช่วยแก้ไขปัญหาการยืนยันตัวตนและการเข้าถึงข้อมูลในระบบขนาดใหญ่ ทุกคนรู้จัก Facebook, Microsoft และ Google ทั้ง 3 องค์กรล้วนแล้วแต่นำแนวคิดของ IdP ไปประยุกต์ใช้
คุณได้รับ Account ของ Gmail หลังสมัครสมาชิกสำเร็จ คุณดาวน์โหลดและติดตั้ง Google Chrome application พร้อมเข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่าน หลังจากนั่นผ่านไปไม่กี่วินาที ด้านบนสุดทางขวามือมีไอคอนเรียงกันประมาณ 8–9 ไปไอคอน Gmail, Google Drive, Google Calenda ….คุณลองคลิกเบาๆ ตรงคำว่า Google Drive เกิดเรื่องมหัศจรรย์บางอย่างขึ้น คุณลงชื่อเข้าใช้งาน Google Driveโดยที่คุณไม่ต้องป้อนข้อมูลใด ๆ เลย! สิ่งนี้คือแนวคิดของ SSO
Single Sign-On (SSO) คือแนวคิดที่ช่วยให้คุณสามารถเข้าถึงแอปพลิเคชันและเว็บไซต์ต่าง ๆ โดยใช้ชื่อผู้ใช้และรหัสผ่านเพียงชุดเดียว ทำให้คุณไม่ต้องกรอกข้อมูลใหม่ ทุก ๆ ครั้งที่เปลี่ยนแอปพลิเคชันหรือไปยังบริการต่างๆ ของระบบ
ปัจจุบันการพัฒนา Application ให้รองรับการทำงานแบบ SSO เป็นเรื่องง่ายเหมือนดีดนิ้ว 10 ที แต่ถ้าย้อนกลับไปช่วง 1980–1990 ยุคของ Stone age มีการเล่นแร่แปรธาตุหลายหลากวิธีและไม่มีมาตรฐานที่ชัดเจน จนถึงช่วงปี 2000
2000
ในช่วงปี 2002 องค์กร OASIS ได้เปิดตัว SAML (ย่อมาจาก Security Assertion Markup Language SAML)
SAML 1.0 นำเสนอวิธีแลกเปลี่ยนข้อมูลการยืนยันตัวตนระหว่างผู้ให้บริการข้อมูลประจำตัว (Identity Provider — IdP) และผู้ให้บริการทรัพยากร (Service Provider — SP) ทำให้การรวมระบบเป็นไปได้ง่ายและมีมาตรฐานเดียวกัน โดยใช้ XML-based assertions เพื่อแลกเปลี่ยนข้อมูลการรับรองตัวตนระหว่าง IdP และ SP
อีกจุดที่น่าสนใจในปี 2000 Roy Fielding นำเสนอวิทยานิพนธ์เกี่ยวกับ REST APIs
ส่วนนี้เป็นทางแยกระหว่าง Json และ XML ในฝั่งของ XML เจ้า SAML คงได้รับความนิยมมาจนถึงปัจจุบัน
2005
OpenID ได้รับการพัฒนาครั้งแรกในปี 2005 โดย Brian Fizpatrick ภายใต้ชื่อ Yadis (โพสต์ต้นฉบับ ที่นี่ ) OpenID ช่วยให้ผู้ใช้งานสามารถใช้ข้อมูลจาก Application ที่เคยลงทะเบียนเพื่อยืนยันตัวตนเเละเข้าใช้งาน Application อื่น ๆ เพื่อแก้ปัญหาการสร้างบัญชีแยกสำหรับแต่ละ Application
ตัวอย่าง: Sign-in with Dot Dot Dot เว็บไซต์หรือ Mobile Application ในปัจจุบัน มักจะมีหน้าและช่องให้กรอกข้อมูลสำหรับเข้าใช้งาน หน้าตา UI ประมาณนี้
คุณมี Twitter Account อยู่แล้ว! คุณใช้นิ้วโป้งสัมผัสที่ปุ่ม Sign in with Twitter สิ่งที่เกิดขึ้น Web Browser พาคุณไปยังหน้าเข้าสู่ระบบของ Twitter และกลับมาเปิด Application พร้อมพาคุณเข้าไปสู่โลกของ Onlyfans โดยที่คุณไม่ต้องสร้างบัญชีใหม่
2010
ย้อนกลับมาที่แอปพลิเคชั่นช่วยออกกำลังกาย หลังจาก Web Browser พาคุณไปยังหน้าเข้าสู่ระบบของ Twitter และคุณเข้าสู่ระบบสำเร็จ การเข้าใช้งานครั้งแรกจะวุ่นวายเล็กน้อย คุณจะเจอหน้าแสดงรายละเอียดการขอเข้าถึงข้อมูลที่อยู่บน Twitter จาก Onlyfans ตรงส่วนนี้คือแนวคิดของ OAuth
OAuth ถูกพัฒนาในปี 2006 โดย Blaine Cook และทีมพัฒนาของ Twitter ร่วมกับ Chris Messina และ David Recordon เพื่อเป็น Standard Authorization Protocol ที่ช่วยให้ผู้ใช้อนุญาตให้แอปพลิเคชันหนึ่งๆ สามารถขอสิทธิ์ในการ Access ข้อมูลใดๆ ของผู้ใช้จากอีก Application หนึ่งได้ เช่น email, address หรือ telephone
จากรูปตัวอย่าง: ข้อมูลที่ OnlyFans ขอเข้าถึงจาก Twitter ของคุณคือ ดูทวีตจากลำดับเหตุการณ์ของคุณ, ดูข้อมูลส่วนตัวบนทวิตเตอร์และการตั้งค่าบัญชี ติดตามและเลิกติดตามบัญชีให้คุณ เป็นต้น
2014
OAuth ได้รับความนิยมอย่างมาก เนื่องจาก OAuth ถูกสร้างมาเพื่อ Authorization เพียงอย่างเดียว ดังนั่นนักพัฒนาจำนวนมากจึง “แฮ็กมัน” เพื่อให้สามารถทำ Authentication และ Authorization จบครบในที่เดียว สิ่งนี้เกิดเป็นมาตรฐานใหม่ที่ชื่อ OIDC
OpenID Connect (OIDC) เป็นโปรโตคอลที่สร้างขึ้นบนพื้นฐานของ OpenID 2.0, OpenID Attribute Exchange 1.0 และ OAuth 2.0 โดยเพิ่มชั้นของการยืนยันตัวตน (authentication) เพื่อให้ผู้ใช้สามารถใช้บัญชีที่มีอยู่ลงชื่อเข้าใช้หลายแอปพลิเคชันหรือบริการพร้อมกับสามารถกำหนด scope ของการเข้าถึงข้อมูลได้ โดยที่ OpenID Connect กำหนดไว้ชัดเจนว่าใช้ JWT Standard ช่วยในการยืนยันตัวตนและขอข้อมูลผู้ใช้ (เช่น ชื่อ อีเมล) ซึ่งทำให้การรับรองตัวตนและการแลกเปลี่ยนข้อมูลมีความปลอดภัยและง่ายขึ้น (แม้ว่า OpenID Connect และ OpenID จะใช้ชื่อเดียวกัน แต่ก็เป็นสองมาตรฐานที่แตกต่างกัน)
Keycloak ?
Keycloak เปิดตัวครั้งแรกในปี 2014 โดยโครงการนี้เริ่มต้นภายใต้องค์กร Red Hat เป็น open-source identity and access management system ถูกออกแบบมาเพื่อช่วยให้นักพัฒนาและองค์กรเพิ่มความสามารถในการยืนยันตัวตน (authentication) และการอนุญาต (authorization) ในแอปพลิเคชันของตนได้อย่างง่ายดาย เราสามารถปรับแต่ง UI ของ Single-Sign On ได้ตามความต้องการของ Business หรือจะเพิ่มขั้นตอนของการทำ Multi-Factor Authentication (MFA) และ OTP เพื่อให้ Application ปลอดภัยยิ่งขึ้นก็สามารถทำได้เช่นกัน อีกทั้งยังรองรับ Social Login ไม่ว่าจะเป็น Facebook, Google, Twitter, GitHub หรือแม้แต่ LinkedIn ก็ตาม
Keycloak มาพร้อมกับ Database ของตัวเอง ช่วยให้คุณจัดการเรื่อง Recovery passwords, Update passwords และ Accepting Terms and Conditions ได้ง่ายยิ่งขึ้น หรือถ้าองค์คุณใช้ LDAP หรือ Active Directory เจ้าตัวนี้ก็สามารถ Connect to Existing user ได้โดยตรง
Keycloak มาพร้อมคอนเซ็ป Lightweight, fast and scalable รองรับการทำ Cluster คุณสามารถ Getting started Keycloak บน Kubernetes, Docker และ Podman ได้ตามความถนัด สุดท้ายความสามารถทั้งหมดที่กล่าวมานั่นทำงานบน Industry-standard protocol อย่าง SAML, OpenID Connect และ OAuth 2.0
จบปิ้ง!! ถ้าคุณใช้ keycloak เราคือเพื่อนกัน https://www.facebook.com/groups/keycloak.thailand/
History Timeline
Refs :
https://natechawin.medium.com/jwt-oauth2-openid-connect-0b55b9e46ddc
https://auth0.com/blog/how-saml-authentication-works/
https://ubuntu.com/blog/history-of -open-source-identity-management-part-1
https://ubuntu.com/blog/history-of-open-source-identity-management-part-2