SAML คืออะไร และทำงานยังไง?

หลายๆคนอาจจะเคยได้ยินคำว่า “SAML“, “แซมแอล“, “เอส เอ เอ็ม แอล” บ่อยๆ แต่อาจจะไม่รู้ว่ามันคืออะไร ทำงานยังไง วันนี้จะขอแนะนำข้อมูลและวิธีการทำงานคร่าวๆ ของ “SAML” หรือ “แซมแอล” ให้ฟังนะครับ

SAML เป็นมาตรฐานที่มีมานานมากตั้งแต่ก่อนมี OAuth และ OpenID โดยเป็นมาตรฐานด้าน Authentication และ Authorization มาตั้งแต่ปี 2001  และถูกพัฒนาขึ้นมาเรื่อยๆ จนในปี 2005 ก็ Publish SAML 2.0 ออกมาซึ่งถูกใช้งานมาจนถึงปัจจุบันนี้ครับ

โดยนิยามสั้นๆ Security Assertion Markup Language (SAML) เป็นมาตรฐานเปิดที่ออกแบบมาเพื่อให้ Identity Provider (IDP) แลกเปลี่ยนการยืนยันตัวตน (Authentication) และสิทธิ (Authorization) ของผู้ใช้งานกับ Service Provider (SP) หรือ WebSite อื่นๆได้ เพื่อให้ผู้ใช้งาน ใช้ Credential เดียวทำการ Login ได้หลาย Web Site แบบ Single Sign-On (SSO) กล่าวคือ Login เพียงครั้งเดียวแล้วสามารถ Reuse การ Login นั้นไปยัง Services Provider อื่นๆได้ด้วย

การนำ SAML เข้ามาใช้งานนอกจากอำนวยความสะดวกให้กับผู้ใช้งานแล้ว ยังช่วยลดงาน Security Operation ให้เป็น Centralize User Management โดยมีเพียง 1 Credential ต่อ 1 User เพื่อลดความสับสน ซ้ำซ้อนของ UserName ในแต่ละระบบงาน โดย SAML ใช้ XML (Extendsible Mark Language) เป็นมาตรฐานในการสื่อสารระหว่าง IDP และ SP

SAML มีองค์ประกอบอะไรบ้าง

จากข้อมูลข้างต้น SAML มีองค์ประกอบสามส่วนหลักๆที่ทำงานร่วมกันดังนี้

  • SAML IDentity Provider (IDP) มีหน้าที่ในการยืนยันตัวตนผู้ใช้งานว่าเป็นใคร และส่งข้อมูลผู้ใช้งาน และสิทธิการใช้งานต่อไปให้ SP ยกตัวอย่างเช่น Gmail เป็น IDP แล้วการเอา Credential ของ Gmail ไป Login Service อื่นๆ
  • SAML Service Provider (SP) เป็น Application ปลายทางที่ต้องการการยืนยันตัวตนผู้ใช้งานจาก IDP เพื่อกำหนดสิทธิ (Authorization) ของผู้ใช้งานเพื่อเข้าใช้งานระบบ
  • SAML Assertion เป็น XML Documents ที่ IDP ส่งไปให้กับ SP โดยข้อมูลจะประกอบไปด้วยสิทธิการใช้งานของผู้ใช้ (User Authorization)

SAML Assertion จะแบ่งเป็นสามแบบ ดังนี้

  • Authentication Assertion – เป็นการ Proof ข้อมูลผู้ใช้งาน, เวลา และวิธีการที่ผู้ใช้งานทำการ Login (Kerberos, MFA เป็นต้น)
  • Attribute Assertion – เป็นการส่งค่า SAML Attribute ซึ่งประกอบไปด้วยข้อมูลของผู้ใช้งานไปยัง Service Provider
  • Authorization Decision – เป็นการบอกว่าผู้ใช้งานมีสิทธิเข้าใช้งานระบบหรือไม่

แล้ว SAML ทำงานอย่างไร?

  1. ผู้ใช้งานทำการ Click ปุ่ม “Login with Google Account” เพื่อเข้าใช้งาน tamacorp.co (จากนี้จะเรียกว่า SP) เมื่อ example.com (SP) ได้รับ Request ดังกล่าว tamacorp.co (SP) จะทำการสร้าง “SAML Authentication Assertion” เพื่อใช้ในการ Request ไปยัง IDP
  2. tamacorp.co (SP) จะส่ง SAML Authentication Ruest ไปยัง IDP และ Redirect ผู้ใช้งานไปยัง IDP เพื่อทำการยืนยันตัวตน เมื่อ IDP ได้รับ SAML Authentication Request จากนั้น IDP จะทำการตรวจสอบ Request ดังกล่าว ว่ามาจาก SP ที่ Register ไว้หรือไม่ หรือถูกต้องครบถ้วน IDP จะส่งหน้าจอให้ผู้ใช้งานเพื่อทำการยืนยันตัวตน
  3. ผู้ใช้งานทำการยืนยันตัวตน (Login) ผ่าน IDP Portal
  4. เมื่อผู้ใช้งานทำการ Login ที่ IDP สำเร็จ IDP จะทำการสร้าง SAML Token รวมถึง SAML Attribute Assertion ที่มีข้อมูลของผู้ใช้งาน ตอบกลับไปยัง tamacorp.co (SP) พร้อม Redirect ผู้ใช้งานกลับไปยัง tamacorp.co (SP)
  5. tamacorp.co (SP) ทำการตรวจสอบ SAML Assertion, ดังข้อมูลของผู้ใช้งานออกมาจาก Attribute Assertion และ Assign Permission ให้กับผู้ใช้งาน และให้ผู้ใช้งานทำการเข้าใช้งานระบบ ตามข้อมูลและสิทธิที่ได้รับมา

จากข้อมูลที่กล่าวมาทั้งหมด จะเป็น Component และการทำงานคร่าวๆแต่ถูกนำมาใช้งานบ่อยที่สุดของ SAML ซึ่งจริงๆแล้ว ยังมีรายละเอียดและ Use Case อีกหลายอย่างที่ยังไม่ได้กล่าวถึง เช่น SAML Authorization Decision Assertion, Federation เป็นต้น ยังไงเพื่อความเข้าใจที่มากขึ้นลองศึกษา SAML Messages จริงๆ ผ่าน Link ใน Reference ด้วยนะครับ ทั้งนี้ผมหวังว่าจะช่วยให้ทุกท่าน ได้ Idea ในการนำ SAML ไปประยุกต์ใช้งานกับ Project ต่างๆของตัวเองต่อไปครับ

 

Reference :

https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language

https://www.ubisecure.com/uncategorized/difference-between-saml-and-oauth/

https://www.samltool.com/

 


Leave a Reply