ข้ามไปยังเนื้อหา

ข้อมูลอ้างอิงการตั้งค่า SSO

ทุกสิ่งที่กำหนดค่าได้เกี่ยวกับการลงชื่อเข้าใช้ครั้งเดียว รวมไว้ที่เดียว ค่าต่าง ๆ อยู่ใน แถว sso_connections ของ global.db (ระดับเซิร์ฟเวอร์โดยการออกแบบ) แก้ไข ผ่าน การตั้งค่า → เซิร์ฟเวอร์ → ลงชื่อเข้าใช้ครั้งเดียว หรือโอเปอเรชัน RPC sso.* แถวที่บันทึกไว้เป็นแหล่งความจริงเพียงหนึ่งเดียว — ไม่มีเส้นทางผ่านตัวแปร สภาพแวดล้อม CC_SAML_* / CC_OIDC_* (การเชื่อมต่อที่อาจมาจากสองที่ได้ คือการเชื่อมต่อที่หน้าจอการตั้งค่าอาจไม่ตรงด้วย)

ฟิลด์ ใช้กับ ค่าเริ่มต้น ความหมาย
enabled ทั้งสอง ปิด การลงชื่อเข้าใช้ใช้การเชื่อมต่อนี้ได้
idpMetadataXml SAML — XML EntityDescriptor ของ IdP (จำเป็นสำหรับการเปิดใช้)
spEntityId SAML <origin>/saml entity ID ของเรา ตรึงไว้เมื่อ origin เปลี่ยน
emailAttribute SAML email แอตทริบิวต์ที่ถืออีเมล; NameID ที่มีรูปแบบเป็นอีเมลคือตัวสำรอง
displayNameAttribute SAML displayName แอตทริบิวต์ชื่อที่แสดง
groupsAttribute SAML groups แอตทริบิวต์ชื่อกลุ่ม
clockSkewSeconds SAML 90 ค่าเผื่อความคลาดเคลื่อนในการตรวจสอบอายุ
allowIdpInitiated SAML ปิด รับ Response ที่ไม่ได้ขอ (ไม่มี InResponseTo)
wantResponseSigned SAML ปิด ต้องมีลายเซ็นที่รากของ Response (ลายเซ็น assertion จำเป็นเสมอ)
issuer OIDC — URL ฐานของผู้ออก (จำเป็นสำหรับการเปิดใช้)
clientId OIDC — ID ไคลเอนต์สาธารณะ (จำเป็นสำหรับการเปิดใช้)
clientSecret OIDC — เฉพาะไคลเอนต์แบบ confidential; เก็บในไฟล์ความลับโหมด 0600 ไม่ใช่ฐานข้อมูล — เขียนได้อย่างเดียวผ่าน RPC (sso.getConfig รายงาน clientSecretPresent)
groupsClaim OIDC groups เคลมที่ถือชื่อกลุ่ม
defaultRole ทั้งสอง member บทบาทเมื่อไม่มีกลุ่มจับคู่ — ไม่มีทางเป็น owner
groupRoleMap ทั้งสอง {} กลุ่ม → บทบาท; การจับคู่เจ้าของถูกปฏิเสธตอนบันทึก
autoMember ทั้งสอง เปิด เพิ่มผู้ใช้เข้าทุกเวิร์กสเปซอัตโนมัติเมื่อลงชื่อเข้าใช้ครั้งแรก
allowJit ทั้งสอง เปิด จัดหาผู้ใช้ที่ไม่รู้จักตอนลงชื่อเข้าใช้

การเชื่อมต่อ SSO ไม่ได้ตั้งต้นจากสภาพแวดล้อม แฟล็กโปรเซสที่เหลืออยู่หนึ่งตัว เกี่ยวกับ การส่งต่อผ่านเบราว์เซอร์ ไม่ใช่แถวการเชื่อมต่อ:

ตัวแปร / แฟล็ก ความหมาย
--web-client-url / CC_SERVER_WEB_CLIENT_URL origin ที่ callback ของ SSO เด้งเบราว์เซอร์กลับไป (ข้อมูลรับรองเดินทางไปกับ fragment ของ URL) ถ้าไม่ตั้งไว้ การส่งต่อจะอยู่ origin เดียวกัน

URL ของผู้ออกเองต้องเป็น https (http ยอมรับเฉพาะผู้ออกแบบ loopback localhost, 127.0.0.1 และ ::1 เท่านั้น)

เอนด์พอยต์ การยืนยันตัวตน วัตถุประสงค์
GET /saml/login?relay=… ไม่มี (เปลี่ยนเส้นทาง) เริ่มการลงชื่อเข้าใช้ที่ SP เป็นผู้เริ่ม; relay=desktop ส่งต่อไปยังแอป, relay=web-popup ส่ง postMessage ไปยังแท็บเชื่อมต่อที่รออยู่ (ซึ่งประกาศ client_origin ของตน ยอมรับเฉพาะเมื่อรายการ origin ที่อนุญาตเชื่อถือ)
POST /saml/acs ไม่มี (IdP POST) ตัวรับ assertion — ตรวจสอบ จัดหา และออกข้อมูลรับรอง
GET /saml/metadata ไม่มี EntityDescriptor ของ SP เรา
GET /oidc/login?relay=… / GET /oidc/callback ไม่มี การไปกลับของ OIDC; relay=desktop ส่งต่อไปยังแอป, relay=web-popup ไปยังแท็บเชื่อมต่อที่รออยู่ (ธรรมเนียม client_origin เดียวกัน)
GET /auth/providers ไม่มี, CORS * การตรวจสอบของหน้าจอเชื่อมต่อ: การเชื่อมต่อ SSO ที่เสนอ (id/kind/label) + pairingEnabled
/scim/v2/Users… Bearer (โทเค็น SCIM) Users สร้าง/อ่าน/รายการ+กรอง/PUT/PATCH/DELETE
/scim/v2/Groups Bearer อ่านอย่างเดียว; การพุชกลุ่มตอบ 501 โดยการออกแบบ
/scim/v2/ServiceProviderConfig Bearer เอกสารความสามารถ

โอเปอเรชัน sso.* ทั้งหมดมีขอบเขตระดับเซิร์ฟเวอร์และจำกัดไว้ที่ เจ้าของ เซิร์ฟเวอร์ (ผู้ดูแลการติดตั้ง, ServerAuthority.serverOwner) การเป็นเจ้าของ เวิร์กสเปซไม่เพียงพอ; การจับคู่เพียงอย่างเดียวไม่เคยให้สิทธิ์เหล่านี้

โอเปอเรชัน วัตถุประสงค์
sso.getConfig การเชื่อมต่อที่บันทึกไว้ของชนิดหนึ่ง
sso.saveConfig ตรวจสอบ บันทึก และใช้ทันที
sso.status แฟล็กเปิดใช้/กำหนดค่าแล้ว การมีอยู่ของโทเค็น SCIM origin ตามแบบฉบับ
sso.testConnection ทดสอบการเชื่อมต่อโดยไม่ต้องไปกลับผ่านเบราว์เซอร์ (SAML: แยกวิเคราะห์ metadata + สร้าง AuthnRequest; OIDC: ค้นหาผู้ออก) พร้อมค่าบนหน้าจอที่ยังไม่บันทึกได้ตามต้องการ
sso.spMetadata ส่งออก EntityDescriptor ของ SP สำหรับ origin หนึ่ง
sso.setPairingEnabled อนุญาต/ห้ามการจับคู่ด้วยมือ (รหัสเชิญ คีย์จับคู่); การปฏิเสธที่จะปิดใช้งานขณะยังไม่มีการเชื่อมต่อ SSO ที่ทำงานได้ช่วยป้องกันการล็อกตัวเองออก
sso.sessionPolicy อ่านอายุสูงสุดของข้อมูลรับรองอุปกรณ์และเวลาหมดอายุเมื่อไม่ใช้งานของการติดตั้ง (นาที; 0 = ไม่ตั้ง)
sso.setSessionPolicy ตั้งขอบเขตเหล่านั้น; บังคับใช้ตอนตรวจสอบอุปกรณ์ ไม่ได้ประกาศให้ไคลเอนต์ทราบ
sso.scimRegenerateToken สร้าง + คืนโทเค็น bearer ของ SCIM (ครั้งเดียว)

ความล้มเหลวของ cc_saml_verify_response มีรหัสที่แน่นอน:

รหัส ความหมาย
signature ลายเซ็นหายไป/ไม่น่าเชื่อถือ/ถูกแก้ไข หรืออัลกอริทึม/การแปลงที่ไม่ได้รับอนุญาต
expired อยู่นอก NotBefore/NotOnOrAfter (เกินความคลาดเคลื่อน)
audience ข้อจำกัด audience ไม่ได้ระบุชื่อเรา
destination ปลายทางของ response ไม่ใช่ ACS ของเรา
request_match InResponseTo ไม่ตรงกับคำขอที่ค้างอยู่ หรือไม่ได้ขอในขณะที่ห้ามไว้
issuer ผู้ออกไม่ใช่ IdP ที่กำหนดค่าไว้
recipient ผู้รับของ subject confirmation ไม่ใช่ ACS ของเรา
malformed ความล้มเหลวระดับ XML/สคีมา
status สถานะที่ IdP รายงานไม่ใช่ Success
invalid / internal อย่างอื่น / ความล้มเหลวที่รอยต่อ
  • sso_connections (global.db) — หนึ่งแถวต่อชนิด ข้ามเวิร์กสเปซโดย การออกแบบ
  • users.sso_subject + users.sso_issuer — การตรึง subject ของผู้ให้บริการ ไม่ซ้ำต่อ (issuer, subject) ผ่านดัชนีบางส่วน
  • users.deactivated_at — ตราประทับการปิดใช้งานของ SCIM
  • โทเค็น bearer ของ SCIM และ client secret ของ OIDC อยู่ในไฟล์ความลับ โหมด 0600 ไม่ใช่ฐานข้อมูล