Lewati ke konten

Referensi konfigurasi SSO

Semua hal yang dapat dikonfigurasi pada masuk tunggal, di satu tempat. Nilainya berada di baris sso_connections pada global.db (memang dirancang untuk seluruh server), diedit melalui Pengaturan → Server → Single sign-on atau operasi RPC sso.*. Baris yang tersimpan adalah satu-satunya sumber kebenaran — tidak ada jalur environment CC_SAML_* / CC_OIDC_* (koneksi yang dapat berasal dari dua tempat adalah koneksi yang bisa saja bertentangan dengan layar pengaturan).

Bidang Berlaku untuk Bawaan Arti
enabled keduanya nonaktif login dapat memakai koneksi ini
idpMetadataXml SAML — XML EntityDescriptor milik IdP (wajib untuk mengaktifkan)
spEntityId SAML <origin>/saml entity ID kami, dipatok saat origin-nya bervariasi
emailAttribute SAML email atribut pembawa email; NameID berbentuk email adalah cadangannya
displayNameAttribute SAML displayName atribut nama tampilan
groupsAttribute SAML groups atribut nama grup
clockSkewSeconds SAML 90 toleransi pergeseran untuk validasi masa berlaku
allowIdpInitiated SAML nonaktif terima Response yang tidak diminta (tanpa InResponseTo)
wantResponseSigned SAML nonaktif wajibkan tanda tangan di akar Response (tanda tangan asertion selalu diwajibkan)
issuer OIDC — URL dasar issuer (wajib untuk mengaktifkan)
clientId OIDC — id klien publik (wajib untuk mengaktifkan)
clientSecret OIDC — hanya untuk klien rahasia; disimpan di berkas rahasia bermode 0600, tidak pernah di basis data — hanya-tulis melalui RPC (sso.getConfig melaporkan clientSecretPresent)
groupsClaim OIDC groups claim pembawa nama grup
defaultRole keduanya member peran saat tidak ada grup yang dipetakan — tidak pernah owner
groupRoleMap keduanya {} grup → peran; pemetaan pemilik ditolak saat disimpan
autoMember keduanya aktif tambahkan pengguna secara otomatis ke setiap ruang kerja saat login pertama
allowJit keduanya aktif sediakan pengguna tak dikenal saat login

Koneksi SSO tidak diisi dari environment. Satu flag proses yang tersisa berkaitan dengan penyerahan ke browser, bukan baris koneksinya:

Variabel / flag Arti
--web-client-url / CC_SERVER_WEB_CLIENT_URL origin yang menjadi pantulan browser oleh callback SSO (kredensial menumpang pada fragmen URL). Tanpa nilai, penyerahannya tetap se-origin.

URL issuer itu sendiri harus https (http hanya diterima untuk issuer loopback localhost, 127.0.0.1, dan ::1).

Endpoint Auth Tujuan
GET /saml/login?relay=… tidak ada (pengalihan) mulai login yang diprakarsai SP; relay=desktop menyerahkan ke aplikasi, relay=web-popup mengirim postMessage ke tab koneksi yang menunggu (yang menyatakan client_origin-nya, dihormati hanya ketika daftar-izin origin mempercayainya)
POST /saml/acs tidak ada (POST dari IdP) konsumer asertion — memverifikasi, menyediakan, menerbitkan
GET /saml/metadata tidak ada EntityDescriptor SP kami
GET /oidc/login?relay=… / GET /oidc/callback tidak ada perjalanan bolak-balik OIDC; relay=desktop menyerahkan ke aplikasi, relay=web-popup ke tab koneksi yang menunggu (konvensi client_origin yang sama)
GET /auth/providers tidak ada, CORS * probe layar koneksi: koneksi SSO yang ditawarkan (id/kind/label) + pairingEnabled
/scim/v2/Users… Bearer (token SCIM) Users create/get/list+filter/PUT/PATCH/DELETE
/scim/v2/Groups Bearer hanya-baca; push grup menjawab 501 secara desain
/scim/v2/ServiceProviderConfig Bearer dokumen kapabilitas

Semua operasi sso.* berskala server dan dibatasi hanya untuk pemilik server (operator instalasi, ServerAuthority.serverOwner). Memiliki sebuah ruang kerja saja tidak cukup; sekadar melakukan pemasangan pun tidak pernah memberikannya.

Operasi Tujuan
sso.getConfig koneksi tersimpan untuk suatu jenis
sso.saveConfig validasi, simpan, dan terapkan langsung
sso.status flag aktif/terkonfigurasi, keberadaan token SCIM, origin kanonis
sso.testConnection uji koneksi tanpa perjalanan bolak-balik browser (SAML: parse metadata + bangun AuthnRequest; OIDC: penemuan issuer), dengan nilai di layar yang belum disimpan sebagai opsi
sso.spMetadata terbitkan EntityDescriptor SP untuk sebuah origin
sso.setPairingEnabled izinkan/larang pemasangan manual (kode undangan, kunci pemasangan); menolak menonaktifkannya selama belum ada koneksi SSO yang berfungsi mencegah pengguna terkunci di luar
sso.sessionPolicy baca usia maksimum dan batas waktu menganggur kredensial perangkat instalasi (menit; 0 = tidak disetel)
sso.setSessionPolicy setel batas tersebut; ditegakkan saat pemeriksaan perangkat, tidak diumumkan ke klien
sso.scimRegenerateToken buat + kembalikan token bearer SCIM (sekali saja)

Kegagalan cc_saml_verify_response membawa kode yang stabil:

Kode Arti
signature tanda tangan hilang/tidak tepercaya/dirusak, atau algoritme/transformasi yang tidak diizinkan
expired di luar NotBefore/NotOnOrAfter (melampaui pergeseran)
audience pembatasan audiens tidak menyebut kami
destination tujuan respons bukan ACS kami
request_match InResponseTo tidak cocok dengan permintaan yang tertunda, atau tidak diminta padahal tidak diizinkan
issuer issuer bukan IdP yang dikonfigurasi
recipient penerima konfirmasi subjek bukan ACS kami
malformed kegagalan pada tingkat XML/skema
status status yang dilaporkan IdP bukan Success
invalid / internal apa pun selain itu / kegagalan pada seam
  • sso_connections (global.db) — satu baris per jenis, LINTAS RUANG KERJA MEMANG DIRANCANG DEMIKIAN.
  • users.sso_subject + users.sso_issuer — penyematan subjek penyedia, unik per (issuer, subject) melalui indeks parsial.
  • users.deactivated_at — stempel penonaktifan SCIM.
  • Token bearer SCIM dan client secret OIDC berada di berkas rahasia bermode 0600, tidak pernah di basis data.