description:"Siapkan provisioning SCIM 2.0 untuk menyinkronkan pengguna dan grup dari penyedia identitas Anda ke SnapOtter. Mencakup Okta, Azure AD / Entra ID, dan integrasi kustom."
SnapOtter mengimplementasikan SCIM 2.0 (System for Cross-domain Identity Management) untuk provisioning pengguna dan grup secara otomatis. Penyedia identitas Anda dapat membuat, memperbarui, menonaktifkan, dan mengaktifkan kembali akun pengguna serta menyinkronkan keanggotaan grup secara otomatis.
::: tip Fitur enterprise
Provisioning SCIM memerlukan lisensi **enterprise** dengan fitur `scim`. Fitur ini tidak tersedia pada paket team. Tanpa fitur tersebut, semua endpoint SCIM (kecuali discovery) mengembalikan 403.
:::
## Prasyarat {#prerequisites}
- Sebuah instance SnapOtter yang berjalan dan dapat dijangkau melalui URL publik
- Akun SnapOtter `admin` bawaan dengan set izin efektif penuh. Peran khusus yang didelegasikan atau kunci API admin yang tidak memiliki izin admin tidak dapat membuat atau mencabut token SCIM global.
`POST /api/v1/enterprise/scim/token` menghasilkan token SCIM baru. Karena token dapat menyediakan dan mengubah pengguna di seluruh instans, titik akhir ini memerlukan peran `admin` bawaan dengan kumpulan izin admin efektif yang lengkap. Memegang `users:manage` dalam peran khusus saja tidak cukup.
Token dikembalikan dalam bentuk teks biasa tepat satu kali. SnapOtter hanya menyimpan hash scrypt. Jika Anda kehilangan token, cabut token tersebut dan buat yang baru.
Hanya satu token SCIM yang aktif pada satu waktu. Membuat token baru akan menggantikan token sebelumnya.
::: warning Penerbitan ulang token setelah peningkatan
Token SCIM lama yang tidak berversi ditolak. Setelah meningkatkan ke rilis yang menerbitkan token `so_scim_v2_...`, buat token baru dan perbarui penyedia identitas Anda sebelum melanjutkan penyediaan.
| User | Akun pengguna | Ya | Ya | Ya | Soft delete |
| Group | Team | Ya | Ya | Ya | Ya |
::: warning
SCIM Group dipetakan ke **team** SnapOtter, bukan role. SCIM tidak dapat mengatur role seorang pengguna. Semua pengguna yang dibuat melalui SCIM diberi role `user`. Untuk mengubah role pengguna, gunakan UI admin SnapOtter.
:::
## Operasi pengguna {#user-operations}
### Buat pengguna {#create-user}
`POST /api/v1/scim/v2/Users`
Membuat akun pengguna baru dengan `authProvider` diatur ke `scim` dan role `user`. Pengguna ditugaskan ke team Default. Jika `active` bernilai `false`, role diatur ke `disabled` sebagai gantinya.
### Daftar dan filter pengguna {#list-and-filter-users}
`GET /api/v1/scim/v2/Users`
Mengembalikan daftar pengguna dengan paginasi. Mendukung parameter kueri `startIndex` dan `count` (maksimum 200 hasil per halaman).
Filtering hanya mendukung `eq` (equals), pada atribut berikut:
-`userName eq "jane"`
-`externalId eq "ext-12345"`
Operator filter dan atribut lain mengembalikan HTTP 400.
### Ambil pengguna {#get-user}
`GET /api/v1/scim/v2/Users/:id`
Mengembalikan satu pengguna berdasarkan ID pengguna SnapOtter mereka.
### Ganti pengguna {#replace-user}
`PUT /api/v1/scim/v2/Users/:id`
Mengganti atribut pengguna. Mendukung `userName`, `externalId`, `emails`, dan `active`. Perubahan username diperiksa untuk konflik (409 jika username baru sudah dipakai pengguna lain).
### Patch pengguna {#patch-user}
`PATCH /api/v1/scim/v2/Users/:id`
Pembaruan sebagian menggunakan SCIM PatchOp. Operasi yang didukung:
Path `name.formatted` dan `displayName` diterima demi kompatibilitas tetapi tidak memiliki efek persisten (SnapOtter tidak menyimpan display name terpisah).
Operasi `replace` tanpa nilai (di mana value adalah objek tanpa `path`) juga didukung, dengan kunci `userName`, `externalId`, `emails`, dan `active`.
### Nonaktifkan pengguna (soft delete) {#deactivate-user-soft-delete}
`DELETE /api/v1/scim/v2/Users/:id`
SnapOtter tidak menghapus pengguna secara permanen melalui SCIM. Sebaliknya, DELETE melakukan deaktivasi lunak:
1. Role pengguna diubah dari nilai saat ini (mis. `editor`) menjadi `disabled:editor`, sambil menyimpan role aslinya.
2. Kata sandi pengguna dihapus.
3. Semua sesi aktif dicabut.
4. Semua API key dicabut.
Pengguna tidak lagi dapat masuk atau menggunakan API key mana pun. Data mereka (file, riwayat) tetap dipertahankan.
### Aktifkan kembali pengguna {#reactivate-user}
Untuk mengaktifkan kembali pengguna yang sebelumnya dinonaktifkan, kirim permintaan `PUT` atau `PATCH` dengan `active: true`. SnapOtter memulihkan role asli dari sebelum deaktivasi (mis. `disabled:editor` menjadi `editor` lagi). Jika role asli tidak dapat ditentukan, akan kembali ke `user`.
::: details Contoh: nonaktifkan dan aktifkan kembali melalui PATCH
- **Secret Token**: Token bearer SCIM yang dibuat di atas
4. Klik **Test Connection**, lalu **Save**.
5. Di bawah **Mappings**, konfigurasikan pemetaan atribut pengguna dan grup. Nilai default biasanya sudah berfungsi, tetapi pastikan `userName` dipetakan ke `userPrincipalName` atau `mail` sesuai keinginan.
6. Atur **Provisioning Status** ke **On** dan simpan.
Azure melakukan provisioning pengguna dan grup pada siklus sinkronisasi tetap (biasanya setiap 40 menit).
## Endpoint discovery {#discovery-endpoints}
Ketiga endpoint ini tersedia tanpa autentikasi dan menjelaskan kemampuan server SCIM:
| Endpoint | Deskripsi |
|---|---|
| `GET /api/v1/scim/v2/ServiceProviderConfig` | Kemampuan server dan fitur yang didukung |
| `GET /api/v1/scim/v2/Schemas` | Definisi skema User dan Group |
| `GET /api/v1/scim/v2/ResourceTypes` | Tipe resource yang tersedia (User, Group) |
`ServiceProviderConfig` mengiklankan kemampuan berikut:
| Fitur | Didukung |
|---|---|
| Patch | Ya |
| Bulk | Tidak |
| Filter | Ya (maks 200 hasil, hanya operator `eq`) |
| Change password | Tidak |
| Sort | Tidak |
| ETag | Tidak |
## Batasan {#limitations}
- **Filtering**: Hanya operator `eq` yang didukung. Filter kompleks, operator `and`/`or`, `co` (contains), dan `sw` (starts with) tidak diimplementasikan.
- **Operasi bulk**: Tidak didukung.
- **Sort dan ETag**: Tidak didukung.
- **Role**: SCIM tidak dapat menetapkan role SnapOtter. Semua pengguna yang di-provisioning mendapat role `user`.
- **MAX_USERS**: Batas variabel lingkungan `MAX_USERS` tidak diberlakukan pada pembuatan pengguna via SCIM. Jika Anda perlu membatasi jumlah pengguna, kelola penugasan di IdP Anda.
- **Satu token**: Hanya satu token SCIM yang dapat aktif pada satu waktu. Jika beberapa IdP membutuhkan akses SCIM, mereka harus berbagi token.
- **Grup adalah team**: SCIM Group berhubungan dengan team, bukan role atau grup izin.
## Pemecahan masalah {#troubleshooting}
### 403 "SCIM provisioning requires an enterprise license with the scim feature" {#_403-scim-provisioning-requires-an-enterprise-license-with-the-scim-feature}
Lisensi Anda tidak menyertakan fitur `scim`, atau tidak ada lisensi yang dikonfigurasi. SCIM memerlukan lisensi paket enterprise. Pastikan `SNAPOTTER_LICENSE_KEY` telah diatur dan lisensi menyertakan fitur `scim`.
Format token salah, menggunakan format tidak berversi yang sudah tidak digunakan lagi, atau tidak cocok dengan hash yang disimpan. Hasilkan token `so_scim_v2_...` saat ini dan perbarui token di pengaturan penyediaan IdP Anda.
Pengguna dengan username yang sama sudah ada. Ini dapat terjadi ketika IdP mencoba ulang pembuatan yang gagal. Periksa username duplikat di panel admin SnapOtter.
IdP mengirim lebih dari 1000 permintaan per menit. Ini biasanya terjadi selama sinkronisasi awal yang besar. Sebagian besar IdP otomatis mencoba ulang setelah jendela pembatasan laju direset. Jika masalah berlanjut, periksa interval sinkronisasi provisioning IdP Anda.
### Pengguna di-deprovisioning tetapi tidak dihapus dari UI {#users-deprovisioned-but-not-removed-from-the-ui}
SCIM DELETE adalah deaktivasi lunak. Pengguna yang dinonaktifkan tetap muncul dalam daftar pengguna admin dengan status dinonaktifkan. Ini disengaja agar data mereka tetap terjaga. Role mereka ditampilkan sebagai `disabled:<original-role>`.