13 ธ.ค. 2568·อ่าน 2 นาที

SSO สำหรับแอปภายใน: แมป SAML/OIDC claims เป็นบทบาทและทีม

ทำให้ SSO สำหรับแอปภายในปลอดภัยขึ้น: แมป SAML หรือ OIDC claims เป็นบทบาทและทีม เชื่อมบัญชี และตั้งค่าปริยายเมื่อข้อมูลขาดหาย

SSO สำหรับแอปภายใน: แมป SAML/OIDC claims เป็นบทบาทและทีม

ทำไมการแมป claims ถึงสำคัญสำหรับแอปภายใน

SSO ฟังดูง่าย: คลิก "Sign in with Okta" หรือ "Sign in with Azure AD" แล้วเข้าได้ เรื่องยากคือสิ่งที่จะเกิดขึ้นหลังจากนั้น หากไม่มีการแมป claims ที่ชัดเจน ผู้คนอาจได้สิทธิ์มากเกินไป (เจ้าหน้าที่ซัพพอร์ตเห็นข้อมูลเงินเดือน) หรือได้น้อยเกินไป (พนักงานใหม่เปิดเครื่องมือที่ต้องการไม่ได้ในวันแรก)

แอปภายในซับซ้อนกว่าที่สาธารณะเพราะใช้ร่วมกันระหว่างทีมและเปลี่ยนแปลงบ่อย เครื่องมือเดียวอาจถูกใช้งานโดย Support, Finance และ Sales พร้อมกัน ผังองค์กรเปลี่ยน ผู้รับเหมาเข้ามาแล้วไป ทีมถูกเปลี่ยนชื่อหรือแยกออก หากกฎการเข้าถึงอยู่แค่ในหัวคน SSO จะคัดลอกความยุ่งนั้นเข้าไปในแอปของคุณอย่างซื่อสัตย์

การแมป claims คือวิธีที่คุณแปลงข้อมูลตัวตนจากผู้ให้บริการตัวตน (IdP) เช่น กลุ่ม แผนก หรือตำแหน่งงาน ให้เป็นสิทธิ์ที่แอปเข้าใจ นั่นมักหมายถึงการตัดสินใจว่า:

  • บทบาทใดบ้างที่มีในแอป (admin, manager, viewer ฯลฯ)
  • ผู้ใช้เป็นสมาชิกทีมหรือเวิร์กสเปซใด
  • แต่ละบทบาททำอะไรได้ และแต่ละทีมเห็นอะไรได้
  • ใครได้สิทธิ์อัตโนมัติ ใครต้องขออนุมัติ

ความเสี่ยงสองอย่างที่ทำให้เกิดปัญหาส่วนใหญ่คือ:

  • การแมปผิดพลาด: ชื่อกลุ่มตรงกับบทบาทผิด หรือกลุ่มกว้างอย่าง "All Employees" ให้สิทธิ์ admin โดยไม่ตั้งใจ
  • ข้อมูลที่ขาดหาย: IdP ไม่ส่งกลุ่มสำหรับบางคน แอตทริบิวต์ว่าง หรือโทเค็นใหญ่เกินไปแล้วถูกตัด

แอปของคุณต้องมีค่าปริยายที่ปลอดภัยเพื่อให้ข้อมูลที่ขาดหายหรือไม่คาดคิดไม่กลายเป็นการให้สิทธิ์โดยไม่ตั้งใจ

SAML vs OIDC แบบพูดง่ายๆ

เมื่อคุณลงชื่อเข้าใช้ด้วย SSO IdP จะส่งแพ็กข้อมูลเล็ก ๆ เกี่ยวกับคุณให้แอป แต่ละชิ้นคือ claim พูดง่าย ๆ คือฟิลด์ที่มีป้ายกำกับ เช่น "email = [email protected]" หรือ "department = Finance"

SAML และ OIDC สามารถส่งข้อมูลคล้ายกันได้ แต่บรรจุแตกต่างกัน

SAML พบได้บ่อยในระบบองค์กรเก่า มักส่งเอกสาร XML (assertion) ที่มี attributes ซึ่ง attributes เหล่านั้นคือ claims ที่แอปอ่าน

OIDC ใหม่กว่า สร้างบน OAuth 2.0 โดยทั่วไปส่งโทเค็น JSON ลงนาม (ID token) และข้อมูลผู้ใช้เพิ่มเติม ฟิลด์ในโทเค็นคือ claims

สำหรับแอปภายใน คุณมักสนใจ claims ชุดเล็ก ๆ เช่น:

  • ที่อยู่อีเมล
  • รหัสผู้ใช้คงที่จาก IdP (subject)
  • ชื่อเต็ม (หรือชื่อและนามสกุล)
  • การเป็นสมาชิกกลุ่ม (ทีม กลุ่มความปลอดภัย)
  • แผนกหรือตำแหน่งงาน

ความแตกต่างหนึ่งช่วยลดความสับสนมาก:

การพิสูจน์ตัวตนตอบว่า "ใครคือผู้ใช้คนนี้?" Claims อย่างรหัสผู้ใช้คงที่และอีเมลช่วยเชื่อมล็อกอิน SSO กับบัญชีที่ถูกต้อง

การอนุญาตตอบว่า "พวกเขาทำอะไรได้?" Claims อย่างกลุ่มหรือแผนกช่วยแมปผู้ใช้ไปยังบทบาทและทีมภายในแอป

สองคนอาจพิสูจน์ตัวตนสำเร็จ แต่เฉพาะคนที่มีกลุ่ม "Finance" เท่านั้นที่ควรเข้าหน้าจอบิลได้

บทบาทและทีม: ตกลงว่าคุณจะแมปอะไร

ก่อนจะแมป attributes ของ SAML หรือแปลง claims ของ OIDC ให้ชัดเจนกับสองสิ่งที่แอปต้องรู้:

  • บทบาทกำหนดสิ่งที่ใครสักคนทำได้ (สิทธิ์)
  • ทีมกำหนดที่ที่พวกเขาอยู่ (ขอบเขต)

บทบาทตอบคำถามอย่าง: คนนี้ดู แก้ไข อนุมัติ ส่งออก จัดการผู้ใช้ หรือเปลี่ยนการตั้งค่าได้ไหม?

ทีมตอบคำถามอย่าง: คนนี้อยู่แผนก ภูมิภาค คิว หรือต้นทุนศูนย์ใด และควรเห็นเรคคอร์ดใดบ้าง?

เก็บบทบาทให้เล็กและเสถียร แอปภายในส่วนใหญ่ต้องการบทบาทไม่กี่แบบที่เปลี่ยนช้ากว่าคนย้ายตำแหน่ง ทีมควรสะท้อนความเป็นจริงประจำวัน: Support Tier 2, พื้นที่ EMEA, เจ้าของคิวชั่วคราว

หลักการ least privilege เป็นค่าปริยายที่ปลอดภัย แอปภายในหลายตัวทำงานได้ดีด้วยสามบทบาท:

  • Viewer: อ่านข้อมูลและค้นหาได้
  • Editor: สร้างและอัปเดตเรคคอร์ดได้
  • Admin: จัดการการตั้งค่า ผู้ใช้ และกฎการเข้าถึงได้

เขียนเป็นภาษาธรรมดาว่าบทบาทแต่ละอันทำอะไรได้ นี่จะป้องกัน "admin ที่ไม่คาดคิด" เมื่ชื่อกลุ่มเปลี่ยนและช่วยให้การตรวจสอบภายหลังง่ายขึ้น

การเข้าถึงตามกลุ่ม: คิดแบบไหนเกี่ยวกับกลุ่ม IdP

การเข้าถึงตามกลุ่มหมายความว่าแอปของคุณไม่ตัดสินสิทธิ์เป็นรายบุคคล แต่พึ่งพา IdP ในการดูแลการเป็นสมาชิกกลุ่ม แล้วแอปของคุณแมปกลุ่มเหล่านั้นเป็นบทบาทและทีม

เริ่มจากตัดสินใจว่ากลุ่มให้สิทธิ์อะไร ในหลายเครื่องมือ หนึ่งกลุ่มแมปเป็นหนึ่งบทบาท (เช่น "Support Agent") และอาจแมปเป็นทีมด้วย (เช่น "Tier 2") จุดสำคัญคือต้องทำให้การแมปน่าเบื่อและคาดเดาได้: กลุ่มเดียวกันต้องหมายถึงการเข้าถึงเดียวกันเสมอ

เมื่อผู้ใช้อยู่หลายกลุ่ม

คนมักเป็นสมาชิกหลายกลุ่ม คุณต้องมีกฎว่าจะแก้ไขความขัดแย้งอย่างไร และต้องรักษากฎนั้นให้คงที่

แนวทางที่พบบ่อย:

  • กฎแบบเพิ่มสิทธิ์: รวมสิทธิ์จากทุกกลุ่มที่จับคู่ (ใช้ได้เมื่อสิทธิ์ถูกจำกัดอย่างแคบ)
  • กฎแบบลำดับความสำคัญ: เลือกกลุ่มที่มีลำดับความสำคัญสูงสุดและละเลยที่เหลือ (ใช้เมื่อบทบาทขัดแย้ง)
  • แบบผสม: เพิ่มสิทธิ์สำหรับทีม แต่ใช้ลำดับความสำคัญสำหรับบทบาท

ไม่ว่าจะเลือกแบบไหน ให้เอกสารไว้ การเปลี่ยนทีหลังอาจทำให้ผู้ใช้ได้สิทธิ์เพิ่มหรือลดโดยไม่คาดคิด

ใช้คอนเวนชันการตั้งชื่อที่ขยายได้

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

  • --

เช่น support-tool-prod-agent หรือ finance-tool-staging-viewer ช่วยหลีกเลี่ยงการใช้ชื่อคลุมเครือซ้ำเช่น "Admins" ข้ามหลายแอป

ถ้าผู้ใช้ไม่มีสมาชิกกลุ่มที่เกี่ยวข้อง ให้ค่าปริยายเป็นไม่มีการเข้าถึง (หรือสถานะผู้เยี่ยมชมจำกัด) และแสดงข้อความอธิบายวิธีขอสิทธิ์

การเชื่อมบัญชี: การจับคู่ผู้ใช้ SSO กับบัญชีแอป

ออกแบบค่าปริยายที่ปลอดภัย
ตั้งค่า onboarding แบบปฏิเสธโดยค่าเริ่มต้น เพื่อไม่ให้การขาดกลุ่มกลายเป็นการให้สิทธิ์โดยไม่ได้ตั้งใจ
สร้างแอป

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

เลือกคีย์หนึ่งที่คงที่และไม่ซ้ำเป็นการจับคู่หลัก

  • สำหรับ OIDC โดยปกติคือ claim sub
  • สำหรับ SAML มักเป็น NameID ถาวรหรือแอตทริบิวต์ผู้ใช้ที่ไม่เปลี่ยนแปลง

เก็บค่านั้นเป็น "IdP user ID" พร้อมกับ issuer/entity ID ของ IdP เพื่อให้ sub เดียวกันจาก IdP ต่างกันจะไม่ชนกัน

อีเมลมีประโยชน์ แต่ควรถือเป็นคีย์อำนวยความสะดวก ไม่ใช่แหล่งความจริง ผู้คนเปลี่ยนอีเมลเมื่อตั้งชื่อใหม่ ย้ายโดเมน หรือควบรวม บัญชีร่วมและอีเมลทดแทนอาจทำให้เกิดการจับคู่ที่ไม่คาดคิด หากจับคู่ด้วยอีเมล ให้ทำเฉพาะเมื่อสัญญาณจาก IdP ยืนยัน และพิจารณาขั้นตอนยืนยันครั้งเดียว

เมื่อเข้าสู่ระบบครั้งแรก เครื่องมือภายในมักเลือกหนึ่งรูปแบบ onboarding:

  • สร้างอัตโนมัติ: สร้างบัญชีทันทีและกำหนดสิทธิ์ขั้นต่ำ
  • เฉพาะเชิญ: อนุญาตการเข้าสำหรับผู้ที่ถูกสร้างล่วงหน้าหรือได้รับการอนุมัติเท่านั้น
  • เวิร์กโฟลว์อนุมัติ: สร้างบัญชีแต่บล็อกการเข้าถึงจนกว่าผู้จัดการหรือผู้ดูแลจะอนุมัติบทบาท/ทีม

ค่าปริยายที่ปลอดภัยคือสร้างอัตโนมัติแต่ไม่มีสิทธิ์เริ่มต้น แล้วให้สิทธิ์ตามกลุ่มหรือกระบวนการอนุมัติ

ทีละขั้นตอน: แมป claims เป็นบทบาทและทีม

ส่งงานเว็บและมือถือพร้อมกัน
สร้าง backend, เว็บ, และแอปมือถือจากโปรเจกต์เดียวสำหรับทีมภายใน
สร้างแอป

การแมปที่ดีทำให้ SSO รู้สึกไร้รอยต่อ: คนลงชื่อเข้าใช้แล้วอยู่ในที่ที่ถูกต้องด้วยสิทธิ์ที่เหมาะสม

เริ่มจากเขียนโมเดลการเข้าถึงเป็นภาษาธรรมดา รายชื่อบทบาทแต่ละอัน (Viewer, Agent, Manager, Admin) และทีมแต่ละอัน (Support, Finance, IT) รวมถึงใครควรได้และทำไม

จากนั้นยืนยันว่า IdP ของคุณส่งอะไรได้จริง สำหรับ SAML หรือ OIDC คุณมักต้องการรหัสผู้ใช้คงที่ (subject หรือ NameID), อีเมล, และหนึ่งหรือหลาย attributes ของกลุ่ม จับค่ากลุ่มที่แน่นอนตามที่ปรากฏ รวมถึงตัวพิเศษต่าง ๆ (case และ prefix ด้วย) — "Support" และ "support" ไม่ใช่สิ่งเดียวกัน

โฟลว์ปฏิบัติได้:

  • กำหนดบทบาทและทีม และมอบเจ้าของสำหรับแต่ละอัน (คนที่อนุมัติการเปลี่ยน)
  • ลิสต์ claims ที่มีได้และชื่อกลุ่มจาก IdP ตามที่ปรากฏ รวมทั้งกรณีพิเศษ (ผู้รับเหมา อีเมลร่วม)
  • เขียนกฎการแมป: group-to-role, group-to-team, และลำดับการ override เมื่อมีหลายกลุ่มจับคู่
  • ทดสอบกับผู้ใช้จริง 3–5 ประเภท (พนักงานใหม่ ผู้จัดการ ผู้รับเหมา ผู้ดูแลระบบ) โดยใช้บัญชี IdP จริง
  • สำหรับแต่ละผู้ใช้ทดสอบ เขียนผลลัพธ์ที่คาดหวังของบทบาท/ทีมไว้ก่อน แล้วลงชื่อเข้าใช้และเทียบ

เก็บตัวอย่างเล็ก ๆ ไว้เพื่อให้กฎเป็นรูปธรรม เช่น ถ้าผู้ใช้อยู่ใน okta-support ให้กลายเป็นทีม Support และบทบาท Agent ถ้าอยู่ใน okta-support-managers บทบาท Manager จะ override Agent

สุดท้าย เพิ่มวิธีดีบักง่าย ๆ บันทึก raw claims ที่ได้รับ (อย่างปลอดภัย), กฎที่จับคู่, และผลบทบาท/ทีมสุดท้าย เมื่่อมีคนบอกว่า "ฉันลงชื่อเข้าใช้แต่เห็นเครื่องมือไม่ได้" วิธีนี้จะเปลี่ยนการคาดเดาเป็นการตรวจสอบที่เร็ว

ค่าปริยายที่ปลอดภัยเมื่อ claims หาย

การขาด claims เป็นเรื่องปกติ IdP อาจไม่ส่งกลุ่มสำหรับบัญชีบริการ คอนเนคเตอร์อาจละฟิลด์ หรือผู้ใช้กำลังย้ายบัญชี ถือว่า "ไม่มีข้อมูล" เป็น "ไม่มีความเชื่อถือ"

ค่าปริยายที่ปลอดภัยที่สุดคือตั้งค่า deny-by-default: ไม่มีบทบาท ไม่มีทีม ไม่มีการเข้าถึง หากต้องอนุญาตให้เข้ามาเพื่อขอสิทธิ์ ให้จำกัดเป็นอ่านอย่างเดียวและชัดเจน

เลือกรูปแบบพฤติกรรมหนึ่งแล้วเขียนไว้:

  • บล็อกการเข้าสู่ระบบพร้อมข้อความชัดเจน: "บัญชีของคุณยังไม่ได้รับการกำหนดสิทธิ์ ติดต่อฝ่ายสนับสนุน"
  • อนุญาตการเข้าถึงจำกัดพร้อมคำเตือนและปิดการใช้งานการกระทำที่สำคัญ
  • สร้างเรคคอร์ดผู้ใช้แต่ไม่กำหนดบทบาทหรือทีมจนกว่าจะอนุมัติ

อย่าให้ค่าปริยายเป็น admin แม้เพียงชั่วคราว

วางแผนสำหรับข้อมูลบางส่วน หากได้อีเมลแต่ไม่มีกลุ่ม คุณยังสร้างบัญชีและส่งไปยังการอนุมัติได้ หากได้กลุ่มแต่ไม่มีตัวระบุคงที่ หลีกเลี่ยงการเชื่อมบัญชีอัตโนมัติเพราะอาจผูกผิดคน

มีเส้นทางยกระดับเมื่อเกิดความล้มเหลว:

  • เจ้าของที่ระบุ (IT หรือผู้ดูแลแอป) ที่อนุมัติการเข้าถึงได้
  • เวิร์กโฟลว์มอบหมายบทบาทแบบแมนนวลพร้อมบันทึกการตรวจสอบ
  • วิธีตรวจสอบ claims อีกครั้งในการเข้าสู่ระบบครั้งถัดไป
  • เวลาหมดอายุสำหรับบัญชี "รอการเข้าถึง"

การรับมือการเปลี่ยนแปลง การเอาออก และการ offboarding

สร้างแอปภายในอย่างรวดเร็ว
สร้างแอปภายในที่มีบทบาท ทีม และกฎการเข้าถึงชัดเจนในที่เดียว
เริ่มสร้าง

คนย้ายทีม เปลี่ยนผู้จัดการ และออกจากบริษัท การตั้งค่า SSO ของคุณควรรับเรื่องนี้เป็นเรื่องปกติ

เมื่อคนเปลี่ยนทีม ให้ปรับสิทธิ์ในการเข้าสู่ระบบครั้งถัดไป: ประเมิน claims จากกลุ่มอีกครั้งและใช้การแมปปัจจุบัน หลีกเลี่ยงการให้สิทธิ์แบบ "ค้าง" ที่ยังคงอยู่เพราะเคยให้เมื่อก่อน

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

การยกเลิกสิทธิ์ควรคาดเดาได้: ปิดผู้ใช้ ลบการเป็นสมาชิกทีม และเก็บข้อมูลการตรวจสอบ คุณมักต้องเก็บเรคคอร์ดอย่างการอนุมัติ ความคิดเห็น และประวัติ เพื่อความสอดคล้อง ขณะเดียวกันป้องกันการกระทำใหม่

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

นโยบาย offboarding ปฏิบัติได้:

  • ตรวจสอบ claims ทุกครั้งที่เข้าสู่ระบบและรีเฟรชการเป็นสมาชิกทีมจาก IdP
  • เมื่อผู้ใช้ถูกลบจากกลุ่มที่จำเป็น ให้ลดสิทธิ์ทันที (ในการเข้าสู่ระบบครั้งถัดไปหรือการซิงก์ครั้งถัดไป)
  • ปิดบัญชีแต่เก็บประวัติการตรวจสอบและประวัติการเป็นเจ้าของ
  • กำหนดวันที่สิ้นสุดสำหรับการเข้าถึงของผู้รับเหมาและทบทวนก่อนต่ออายุ
  • รันการทบทวนการเข้าถึงเป็นระยะสำหรับบทบาทเสี่ยงสูง เช่น ฝ่ายการเงินหรือผู้ดูแลระบบ

ความผิดพลาดและกับดักที่พบบ่อย

การหยุดชะงักของ SSO ส่วนใหญ่ไม่ใช่เพราะ SAML หรือ OIDC "ยาก" แต่มักเกิดจากแอปสมมติอะไรไม่ปลอดภัยเกี่ยวกับคน กลุ่ม และตัวระบุ

ความผิดพลาดทั่วไปคือผสมการแมปบทบาทกับการแมปทีม บทบาทคือ "คุณทำอะไรได้?" ทีมคือ "คุณอยู่ที่ไหน?" หากแมปกลุ่มทีมตรงไปยังบทบาททรงพลังอย่าง Admin มักให้การเข้าถึงกว้างกับทุกคนที่บังเอิญอยู่ในทีมนั้น

กับดักอีกอย่างคือพึ่งพาอีเมลเป็นตัวระบุเดียวในการเชื่อมบัญชี อีเมลเปลี่ยน และอีเมลทดแทนาอาจทำให้เกิดบัญชีซ้ำ ใช้ IdP user ID ที่เสถียร (เช่น subject/NameID) เป็นคีย์หลักและใช้อีเมลเป็นฟิลด์แสดงผล/แจ้งเตือน

ปัญหายอดฮิตอื่น ๆ:

  • เปิดระบบเมื่อกลุ่มหาย (ควรปฏิเสธหรือให้สิทธิ์ต่ำแทน ไม่ใช่ให้สิทธิ์เต็ม)
  • ชื่อกลุ่มไม่ชัดเจนที่ถูกนำกลับมาใช้ใน dev/staging/production
  • ถือการเป็นสมาชิกกลุ่มเป็นรายการสิทธิ์โดยไม่ทบทวนความหมายของแต่ละกลุ่ม
  • ไม่จัดการผู้ใช้หลายทีมที่ต้องเข้าถึงหลายพื้นที่โดยไม่กลายเป็น admin
  • ลืมพาร์ทเนอร์และผู้รับเหมา ควรแยกจากทีมพนักงาน

ทดสอบกรณีขอบก่อนเปิดตัว ผู้วิเคราะห์การเงินในเหตุฉุกเฉินอาจต้องการสองทีมและบทบาทที่ยกระดับ หากกฎของคุณให้ได้เพียงทีมเดียว เขาจะสูญเสียการเข้าถึงหรือได้สิทธิ์เกินความจำเป็น

เช็คลิสต์ด่วนก่อนเปิดตัว

แปลง claims เป็นสิทธิ์การเข้าถึง
แมปข้อมูลระบุตัวตนเป็นบทบาทในแอปด้วยตรรกะแบบภาพ แทนที่จะเขียนโค้ดเชื่อมเอง
ลอง AppMaster

ก่อนเปิด SSO ให้ทุกคน ทำ dry run กับบัญชีทดสอบจากแต่ละทีม ปัญหาการเข้าถึงส่วนใหญ่ปรากฏทันทีเมื่อทดสอบพนักงานใหม่ การเปลี่ยนบทบาท และกรณี offboarding

เริ่มจากการเชื่อมบัญชี เลือกตัวระบุที่ไม่เปลี่ยนและไม่ซ้ำ ใน OIDC มักเป็น sub ใน SAML มักเป็น NameID หรือแอตทริบิวต์ถาวร

ถัดไป ตัดสินใจว่าจะทำอย่างไรเมื่อ claims ขาดหาย ค่าปริยายที่ปลอดภัยคือไม่ให้สิทธิ์ยกระดับ (และในหลายแอปคือไม่ให้เข้าถึง) เมื่อ claims ของกลุ่มหรือบทบาทขาดหรือว่าง ตรวจสอบว่ามีบทบาทความสามารถต่ำอย่างน้อยหนึ่งบทบาทที่ให้คนเข้ามาโดยไม่เปิดเผยการกระทำที่ละเอียดอ่อน หากสอดคล้องกับเวิร์กโฟลว์ของคุณ

เช็คลิสต์ก่อนเปิดตัวอย่างง่าย:

  • ยืนยันตัวระบุการเชื่อมที่เสถียรและไม่ซ้ำ (และเห็นได้ใน logs)
  • ยืนยันว่าการขาดกลุ่มไม่ให้สิทธิ์เกินบทบาทความสามารถต่ำ
  • ต้องการกลุ่ม admin เฉพาะและขั้นตอนอนุมัติที่สองสำหรับ admin (แม้จะเป็นแมนนวล)
  • ทดสอบการลบ: เมื่อผู้ใช้ถูกลบจากกลุ่ม การเข้าถึงลดลงในการเข้าสู่ระบบครั้งถัดไป (หรือการซิงก์ถัดไป)
  • เขียนกฎการแมปให้คนในทีมเข้าใจได้ในหนึ่งหน้า

ตัวอย่าง: เครื่องมือภายในสำหรับ support และ finance กับกลุ่ม SSO

อัตโนมัติการอนุมัติการเข้าถึง
สร้างขั้นตอนอนุมัติของผู้จัดการสำหรับคำขอการเข้าถึงเมื่อกลุ่มขาดหรือไม่ชัดเจน
ลองเวิร์กโฟลว์

นึกถึงเครื่องมือปฏิบัติการที่ใช้โดย Support, Finance และผู้จัดการ คุณต้องการให้คนลงชื่อเข้าใช้แล้วเห็นหน้าจอและการกระทำที่ถูกต้องโดยไม่ต้องให้ผู้ดูแลมาซ่อมบัญชี

สร้างกลุ่ม IdP บางกลุ่มและแมปไปยังบทบาทและทีมในแอป:

  • ops-support -> Role: Support Agent, Team: Support
  • ops-finance -> Role: Finance Analyst, Team: Finance
  • ops-managers -> Role: Manager, Team: Management

ผลลัพธ์เป็นอย่างไร:

UserIdP identifier used for linkingIdP groups claimIn-app resultNotes
Maya (Support)sub=00u8...k3ops-supportSupport Agent, Support teamดูตั๋ว ตอบ และแท็กปัญหาได้ แต่เห็นหน้าการเรียกเก็บเงินไม่ได้
Omar (Manager)sub=00u2...p9ops-support, ops-managersManager, Management teamกฎการแมปเลือกบทบาทที่สูงกว่า แต่แยก Finance ออกไป
Lina (Finance)sub=00u5...w1Missing (group claim not sent)ค่าเริ่มต้น: ไม่มีการเข้าถึง (หรือ Read-only Guest)ค่าปริยายที่ปลอดภัยป้องกันการให้สิทธิ์เกิน Lina เห็น: "ยังไม่ได้รับสิทธิ์ ติดต่อผู้ดูแล"

กรณีเปลี่ยนอีเมล: Omar เปลี่ยนจาก [email protected] เป็น [email protected] เพราะแอปเชื่อมบัญชีด้วย IdP user ID ที่เสถียร (เช่น sub ใน OIDC หรือ NameID ถาวรใน SAML) แทนอีเมล เขาจึงไม่เกิดบัญชีซ้ำ ยังคงประวัติและบันทึกการตรวจสอบ

เพื่อตรวจสอบการเข้าถึงอย่างไม่มีข้อสงสัย ให้เก็บมุมมอง "effective access" ที่แสดงตัวตน IdP ที่ผูกไว้ กลุ่มที่ได้รับ บทบาท และทีมที่ได้ เมื่ออะไรผิดปกติ คุณจะบอกได้เร็วว่าเป็นปัญหา IdP กฎการแมป หรือ claims หาย

ขั้นตอนถัดไป: รักษาการเข้าถึงให้คาดเดาได้เมื่อองค์กรเปลี่ยน

ส่วนที่ยากไม่ใช่การเปิดตัวครั้งแรก แต่เป็นการรักษาการเข้าถึงให้สมเหตุสมผลหลังการปรับโครงสร้าง การสร้างทีมใหม่ และข้อยกเว้นแบบ "ชั่วคราว"

เก็บเอกสารการแมปบนหน้าเดียวที่ตอบคำถาม:

  • กลุ่ม IdP ไหนแมปไปบทบาทและทีมใด
  • ค่าปริยายเมื่อ claim หายคืออะไร (และใครอนุมัติการเปลี่ยน)
  • ใครเป็นเจ้าของแต่ละบทบาทความเสี่ยงสูง (finance admin, user admin, data export)
  • จัดการผู้รับเหมาและบัญชีบริการอย่างไร
  • แหล่งข้อมูลจริงคือที่ไหน (IdP หรือแอป)

รันพาไลท์กับฝ่ายที่ขอบเขตชัด เจอข้อผิดพลาด จัดการ แล้วค่อยขยายโดยไม่คิดกฎใหม่ ตั้งการทบทวนสิทธิ์เป็นรอบสำหรับบทบาทที่ทำความเสียหายได้จริง: รายเดือนสำหรับ admin และบทบาทเสี่ยงสูง รายไตรมาสสำหรับบทบาทปกติ

ถ้าคุณกำลังสร้างแอปภายในเอง จะช่วยได้หากบทบาท ทีม และตรรกะธุรกิจอยู่ใกล้กันเพื่อให้การเปลี่ยนแปลงทดสอบได้ง่าย AppMaster (appmaster.io) เป็นอีกทางเลือกสำหรับทีมที่ต้องการม็อดเดลบทบาทและเวิร์กโฟลว์แบบภาพ แล้วสร้างโค้ด backend, เว็บ, และมือถือจริงเมื่อความต้องการเปลี่ยน โดยไม่ต้องเพิ่มการแก้ไขสิทธิ์เฉพาะทาง

คำถามที่พบบ่อย

การแมป claim ใน SSO คืออะไร และทำไมแอปภายในต้องการมัน?

การแมป claim คือขั้นตอนที่แปลข้อมูลที่ IdP ส่งมา (เช่น กลุ่ม แผนก หรือ ตำแหน่งงาน) เป็นบทบาทและทีมที่แอปของคุณใช้ควบคุมการเข้าถึง หากไม่ทำ ผู้ใช้จะลงชื่อเข้าใช้สำเร็จแต่ได้สิทธิ์ไม่ตรงกับที่ควรจะเป็น

แอปควรทำอย่างไรถ้ากลุ่ม (group claims) หายหรือว่าง?

ค่าปริยายที่ดีคือปฏิเสธโดยค่าเริ่มต้น: สร้างหรือจดจำผู้ใช้ได้ แต่ไม่กำหนดบทบาทหรือทีมจนกว่าจะมีการแมปที่รู้จัก หากต้องการจุดเข้าเพื่อ “ขอสิทธิ์” ให้จำกัดสิทธิ์ชัดเจนและอย่าแปลงการขาดข้อมูลเป็นการให้สิทธิ์

วิธีที่ปลอดภัยที่สุดในการเชื่อมล็อกอิน SSO กับบัญชีในแอปคืออะไร?

ใช้กุญแจตัวตนคงที่ที่ไม่เปลี่ยนจาก IdP เป็นหลัก เช่น sub ใน OIDC หรือ NameID/แอตทริบิวต์ถาวรใน SAML เก็บค่านั้นพร้อมกับ issuer/entity ID ของ IdP เพื่อป้องกันการชนกันระหว่าง IdP ต่างกัน

ทำไมไม่ควรใช้อีเมลเป็นตัวระบุหลักในการเชื่อมบัญชี?

ใช้อีเมลเป็นฟิลด์อำนวยความสะดวก ไม่ใช่แหล่งข้อมูลหลัก เพราะอีเมลอาจเปลี่ยนได้จากการเปลี่ยนชื่อ โยกโดเมน หรือการควบรวม หากจับคู่ด้วยอีเมล ให้ทำเฉพาะเมื่อมีการยืนยันจาก IdP และพิจารณาขั้นตอนยืนยันครั้งเดียว

ความแตกต่างระหว่างบทบาทและทีมในแอปภายในคืออะไร?

บทบาทกำหนดสิ่งที่คนๆ นั้นทำได้ เช่น แก้ไข อนุมัติ ส่งออก หรือจัดการผู้ใช้ ส่วนทีมกำหนดขอบเขตข้อมูลที่พวกเขาเห็น เช่น แผนก ภูมิภาค คิว หรือศูนย์ต้นทุน

ควรเริ่มด้วยกี่บทบาทสำหรับเครื่องมือภายในทั่วไป?

จุดเริ่มต้นง่ายๆ คือสามบทบาท: Viewer, Editor, และ Admin โดยกำหนดความหมายชัดเจน การเก็บบทบาทให้เล็กและคงที่ช่วยลดความผิดพลาดเมื่อโครงสร้างองค์กรเปลี่ยน

จัดการผู้ที่อยู่หลายกลุ่ม IdP อย่างไร?

เลือกกฎการแก้ไขความขัดแย้งอย่างสม่ำเสมอและจดมันไว้ หลายทีมใช้แนวทางผสม: เพิ่มสิทธิ์จากหลายกลุ่มสำหรับการเป็นสมาชิกทีม แต่เลือกบทบาทตามลำดับความสำคัญเพื่อหลีกเลี่ยงสิทธิ์ขัดแย้ง

ควรตั้งชื่อกลุ่ม IdP อย่างไรเพื่อหลีกเลี่ยงการให้สิทธิ์โดยไม่ได้ตั้งใจ?

ตั้งชื่อกลุ่มให้ชัดเจน เช่น ใส่ชื่อแอป สภาพแวดล้อม และบทบาทในชื่อกลุ่ม เพื่อให้เห็นชัดว่ากลุ่มให้อะไร หลีกเลี่ยงชื่อคลุมเครืออย่าง “Admins” ที่ถูกนำกลับมาใช้ข้ามแอป

ควรบันทึกอะไรเพื่อดีบักปัญหาการเข้าถึงโดยไม่ต้องเดา?

บันทึกพอให้เห็นว่า claims ใดมาถึง แอปจับแมปกฎอันไหน และบทบาท/ทีมสุดท้ายเป็นอย่างไร โดยไม่เปิดเผยเนื้อหาโทเค็นที่ละเอียดอ่อน วิธีนี้จะเปลี่ยนการร้องเรียน “ฉันเห็นเครื่องมือไม่ได้” ให้เป็นการตรวจสอบ claims เทียบกับกฎได้อย่างรวดเร็ว

จะรักษาความถูกต้องของการเข้าถึงเมื่อคนเปลี่ยนทีมหรือออกจากบริษัทอย่างไร?

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

ง่ายต่อการเริ่มต้น
สร้างบางสิ่งที่ น่าทึ่ง

ทดลองกับ AppMaster ด้วยแผนฟรี
เมื่อคุณพร้อม คุณสามารถเลือกการสมัครที่เหมาะสมได้

เริ่ม