ข้อมูลอ้างอิงการตั้งค่า 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 เท่านั้น)
เอนด์พอยต์ HTTP
หัวข้อที่มีชื่อว่า “เอนด์พอยต์ HTTP”| เอนด์พอยต์ | การยืนยันตัวตน | วัตถุประสงค์ |
|---|---|---|
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 | เอกสารความสามารถ |
โอเปอเรชัน RPC
หัวข้อที่มีชื่อว่า “โอเปอเรชัน RPC”โอเปอเรชัน 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 ไม่ใช่ฐานข้อมูล