Tutorial: Mengembangkan dan merencanakan provisi untuk titik akhir SCIM di ID Microsoft Entra
Sebagai pengembang aplikasi, Anda dapat menggunakan API manajemen pengguna System for Cross-Domain Identity Management (SCIM) untuk mengaktifkan provisi otomatis pengguna dan grup antara aplikasi Anda dan ID Microsoft Entra. Artikel ini menjelaskan cara membangun titik akhir SCIM dan berintegrasi dengan layanan provisi Microsoft Entra. Spesifikasi SCIM menyediakan skema pengguna umum untuk provisi. Saat digunakan dengan standar federasi seperti SAML atau OpenID Connect, SCIM memberi administrator solusi berbasis standar end-to-end untuk manajemen akses.
SCIM 2.0 adalah definisi standar dari dua titik akhir: /Users
titik akhir dan /Groups
titik akhir. Ini menggunakan titik akhir REST API umum untuk membuat, memperbarui, dan menghapus objek. SCIM terdiri dari skema yang telah ditentukan sebelumnya untuk atribut umum seperti nama grup, nama pengguna, nama depan, nama belakang, dan email.
Aplikasi yang menawarkan REST API SCIM 2.0 dapat mengurangi atau menghilangkan rasa sakit bekerja dengan API manajemen pengguna eksklusif. Misalnya, setiap klien SCIM yang patuh tahu cara membuat HTTP POST objek JSON ke /Users
titik akhir untuk membuat entri pengguna baru. Alih-alih membutuhkan API yang sedikit berbeda untuk tindakan dasar yang sama, aplikasi yang sesuai dengan standar SCIM dapat langsung memanfaatkan klien, alat, dan kode yang sudah ada sebelumnya.
Skema objek pengguna standar dan API rest untuk manajemen yang ditentukan dalam SCIM 2.0 (RFC 7642, 7643, 7644) memungkinkan penyedia identitas dan aplikasi untuk lebih mudah berintegrasi satu sama lain. Pengembang aplikasi yang membangun titik akhir SCIM dapat berintegrasi dengan klien yang mematuhi SCIM tanpa harus melakukan pekerjaan kustom.
Untuk mengotomatiskan provisi ke aplikasi, perlu membangun dan mengintegrasikan titik akhir SCIM yang diakses oleh layanan provisi Microsoft Entra. Gunakan langkah-langkah berikut untuk mulai memprovisikan pengguna dan grup ke dalam aplikasi Anda.
Rancang skema pengguna dan grup Anda - Identifikasi objek dan atribut aplikasi untuk menentukan bagaimana mereka memetakan ke skema pengguna dan grup yang didukung oleh implementasi Microsoft Entra SCIM.
Pahami implementasi Microsoft Entra SCIM - Pahami bagaimana layanan provisi Microsoft Entra diterapkan untuk memodelkan penanganan dan respons permintaan protokol SCIM Anda.
Bangun titik akhir SCIM - Titik akhir harus kompatibel dengan SCIM 2.0 untuk diintegrasikan dengan layanan provisi Microsoft Entra. Sebagai opsi, gunakan pustaka Microsoft Common Language Infrastructure (CLI) dan sampel kode untuk membangun titik akhir Anda. Sampel ini hanya untuk referensi dan pengujian; sebaiknya jangan menggunakannya sebagai dependensi di aplikasi produksi Anda.
Integrasikan titik akhir SCIM Anda dengan layanan provisi Microsoft Entra. MICROSOFT Entra ID mendukung beberapa aplikasi pihak ketiga yang mengimplementasikan SCIM 2.0. Jika Anda menggunakan salah satu aplikasi ini, maka Anda dapat dengan cepat mengotomatiskan provisi dan deprovisi pengguna dan grup.
[Opsional] Terbitkan aplikasi Anda ke galeri aplikasi Microsoft Entra - Memudahkan pelanggan untuk menemukan aplikasi Anda dan dengan mudah mengonfigurasi provisi.
Mendesain skema pengguna dan grup Anda
Setiap aplikasi memerlukan atribut yang berbeda untuk membuat pengguna atau grup. Mulai integrasi Anda dengan mengidentifikasi objek yang diperlukan (pengguna, grup) dan atribut (nama, manajer, jabatan, dan sebagainya) yang dibutuhkan aplikasi Anda.
Standar SCIM mendefinisikan skema untuk mengelola pengguna dan grup.
Skema pengguna inti hanya memerlukan tiga atribut (semua atribut lainnya bersifat opsional):
id
, pengidentifikasi yang ditentukan penyedia layananuserName
, pengidentifikasi unik untuk pengguna (umumnya memetakan ke nama prinsipal pengguna Microsoft Entra)meta
, metadata baca-saja yang dikelola oleh penyedia layanan
Selain skema pengguna inti , standar SCIM mendefinisikan ekstensi pengguna perusahaan dengan model untuk memperluas skema pengguna untuk memenuhi kebutuhan aplikasi Anda.
Misalnya, jika aplikasi Anda memerlukan email pengguna dan manajer pengguna, gunakan skema inti untuk mengumpulkan email pengguna dan skema pengguna perusahaan untuk mengumpulkan manajer pengguna.
Untuk merancang skema Anda, ikuti langkah-langkah berikut:
Cantumkan atribut yang diperlukan aplikasi Anda, lalu kategorikan sebagai atribut yang diperlukan untuk autentikasi (misalnya, loginName dan email). Atribut diperlukan untuk mengelola siklus hidup pengguna (misalnya, status /aktif), dan semua atribut lain yang diperlukan agar aplikasi berfungsi (misalnya, manajer, tag).
Periksa apakah atribut sudah ditentukan dalam skema pengguna inti atau skema pengguna perusahaan . Jika tidak, Anda harus menentukan ekstensi ke skema pengguna yang mencakup atribut yang hilang. Lihat contoh ekstensi kepada pengguna untuk mengizinkan provisi pengguna
tag
.Petakan atribut SCIM ke atribut pengguna di MICROSOFT Entra ID. Jika salah satu atribut yang telah Anda tentukan di titik akhir SCIM Anda tidak memiliki mitra yang jelas pada skema pengguna Microsoft Entra, pandu administrator penyewa untuk memperluas skema mereka, atau menggunakan atribut ekstensi seperti yang ditunjukkan dalam contoh untuk
tags
properti .
Tabel berikut ini mencantumkan contoh atribut yang diperlukan:
Atribut/contoh aplikasi yang diperlukan | Atribut SCIM yang dipetakan | Atribut Microsoft Entra yang Dipetakan |
---|---|---|
loginName | userName | userPrincipalName |
firstName | name.givenName | givenName |
lastName | name.familyName | nama keluarga |
workMail | emails[type eq "work"].value | Pos |
manajer | manajer | manajer |
tag | urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User:tag |
extensionAttribute1 |
keadaan | aktif | isSoftDeleted (nilai komputasi tidak disimpan pada pengguna) |
Payload JSON berikut menunjukkan contoh skema SCIM:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
"urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User"],
"userName":"bjensen@testuser.com",
"id": "48af03ac28ad4fb88478",
"externalId":"bjensen",
"name":{
"familyName":"Jensen",
"givenName":"Barbara"
},
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
"manager": "123456"
},
"urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User": {
"tag": "701984",
},
"meta": {
"resourceType": "User",
"created": "2010-01-23T04:56:22Z",
"lastModified": "2011-05-13T04:42:34Z",
"version": "W\/\"3694e05e9dff591\"",
"location":
"https://example.com/v2/Users/00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
}
}
Nota
Selain atribut yang diperlukan untuk aplikasi, representasi JSON juga mencakup atribut , , externalId
dan meta
yang diperlukanid
.
Ini membantu mengategorikan antara /User
dan /Group
untuk memetakan atribut pengguna default apa pun di MICROSOFT Entra ID ke SCIM RFC, lihat bagaimana menyesuaikan atribut dipetakan antara ID Microsoft Entra dan titik akhir SCIM Anda.
Tabel berikut ini mencantumkan contoh atribut pengguna:
Pengguna Microsoft Entra | urn:ietf:params:scim:schemas:extension:enterprise:2.0:User |
---|---|
IsSoftDeleted | aktif |
departemen | urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department |
displayName | displayName |
employeeId | urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber |
Facsimile-TelephoneNumber | phoneNumbers[type eq "fax"].value |
givenName | name.givenName |
jobTitle | titel |
pos | emails[type eq "work"].value |
mailNickname | externalId |
manajer | urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager |
telepon selular | phoneNumbers[type eq "mobile"].value |
postalCode | addresses[type eq "work"].postalCode |
alamat proksi | emails[type eq "other"]. Nilai |
physical-Delivery-OfficeName | addresses[type eq "other"]. Diformat |
streetAddress | addresses[type eq "work"].streetAddress |
nama keluarga | name.familyName |
nomor telepon | phoneNumbers[type eq "work"].value |
user-PrincipalName | userName |
Tabel berikut ini mencantumkan contoh atribut grup:
Grup Microsoft Entra | urn:ietf:params:scim:schemas:core:2.0:Group |
---|---|
displayName | displayName |
anggota | anggota |
objectId | externalId |
Nota
Anda tidak diharuskan untuk mendukung pengguna dan grup, atau semua atribut yang ditampilkan di sini, itu hanya referensi tentang bagaimana atribut di ID Microsoft Entra sering dipetakan ke properti dalam protokol SCIM.
Ada beberapa titik akhir yang ditentukan dalam SCIM RFC. Anda dapat memulai dengan /User
titik akhir lalu memperluas dari sana. Tabel berikut ini mencantumkan beberapa titik akhir SCIM:
Endpoint | Deskripsi |
---|---|
/Pengguna | Lakukan operasi CRUD pada objek pengguna. |
/Kelompok | Lakukan operasi CRUD pada objek grup. |
/Skema | Set atribut yang didukung oleh setiap klien dan penyedia layanan dapat bervariasi. Satu penyedia layanan mungkin mencakup name , , title dan emails , sementara penyedia layanan lain menggunakan name , title , dan phoneNumbers . Titik akhir skema memungkinkan penemuan atribut yang didukung. |
/Massal | Operasi massal memungkinkan Anda melakukan operasi pada kumpulan besar objek sumber daya dalam satu operasi (misalnya, memperbarui keanggotaan untuk grup besar). |
/ServiceProviderConfig | Menyediakan detail tentang fitur standar SCIM yang didukung, misalnya, sumber daya yang didukung dan metode autentikasi. |
/ResourceTypes | Menentukan metadata tentang setiap sumber daya. |
Nota
/Schemas
Gunakan titik akhir untuk mendukung atribut kustom atau jika skema Anda sering berubah karena memungkinkan klien untuk mengambil skema terbaru secara otomatis. /Bulk
Gunakan titik akhir untuk mendukung grup.
Memahami implementasi Microsoft Entra SCIM
Layanan provisi Microsoft Entra dirancang untuk mendukung API manajemen pengguna SCIM 2.0.
Penting
Perilaku implementasi Microsoft Entra SCIM terakhir diperbarui pada 18 Desember 2018. Untuk informasi tentang apa yang berubah, lihat Kepatuhan protokol SCIM 2.0 dari layanan provisi pengguna Microsoft Entra.
Dalam spesifikasi protokol SCIM 2.0, aplikasi Anda harus mendukung persyaratan ini:
Syarat | Catatan referensi (protokol SCIM) |
---|---|
Membuat pengguna, dan secara opsional juga mengelompokkan | Bagian 3.3 |
Mengubah pengguna atau grup dengan permintaan PATCH | Bagian 3.5.2. Mendukung memastikan bahwa grup dan pengguna disediakan dengan cara yang berkinerja. |
Mengambil sumber daya yang diketahui untuk pengguna atau grup yang dibuat sebelumnya | Bagian 3.4.1 |
Mengkueri pengguna atau grup | Bagian 3.4.2. Secara default, pengguna diambil dengan mereka id dan dikueri dengan grup dan externalId , dan mereka username dikueri dengan displayName . |
Filter excludedAttributes=members saat mengkueri sumber daya grup | Bagian 3.4.2.2 |
Mendukung daftar pengguna dan paginating | Bagian 3.4.2.4. |
Menghapus sementara pengguna active=false dan memulihkan pengguna active=true |
Objek pengguna harus dikembalikan dalam permintaan apakah pengguna aktif atau tidak. Satu-satunya waktu pengguna tidak boleh dikembalikan adalah ketika dihapus secara permanen dari aplikasi. |
Mendukung titik akhir /Skema | Bagian 7 Titik akhir penemuan skema digunakan untuk menemukan lebih banyak atribut. |
Terima token pembawa tunggal untuk autentikasi dan otorisasi ID Microsoft Entra ke aplikasi Anda. |
Gunakan panduan umum saat menerapkan titik akhir SCIM untuk memastikan kompatibilitas dengan ID Microsoft Entra:
Umum:
id
adalah properti yang diperlukan untuk semua sumber daya. Setiap respons yang mengembalikan sumber daya harus memastikan setiap sumber daya memiliki properti ini, kecualiListResponse
dengan elemen nol.- Nilai yang dikirim harus disimpan dalam format yang sama dengan yang dikirim. Nilai yang tidak valid harus ditolak dengan pesan kesalahan yang deskriptif dan dapat ditindaklanjuti. Transformasi data tidak boleh terjadi antara data dari ID Microsoft Entra dan data yang disimpan dalam aplikasi SCIM. (misalnya. Nomor telepon yang dikirim sebagai 55555555555 tidak boleh disimpan/dikembalikan sebagai +5 (555) 555-5555)
- Tidak perlu menyertakan seluruh sumber daya dalam respons PATCH .
- Tidak memerlukan kecocokan peka huruf besar/kecil pada elemen struktural di SCIM, khususnya nilai operasi PATCH
op
, seperti yang didefinisikan dalam bagian 3.5.2. MICROSOFT Entra ID memancarkanop
nilai sebagai Tambahkan, Ganti, dan Hapus. - ID Microsoft Entra membuat permintaan untuk mengambil pengguna dan grup acak untuk memastikan bahwa titik akhir dan kredensial valid. Ini juga dilakukan sebagai bagian dari alur Uji Koneksi .
- Mendukung HTTPS di titik akhir SCIM Anda.
- Atribut kompleks dan multinim kustom didukung tetapi ID Microsoft Entra tidak memiliki banyak struktur data kompleks untuk menarik data dari dalam kasus ini. Atribut nama/nilai dapat dipetakan ke dengan mudah, tetapi mengalirkan data ke atribut kompleks dengan tiga subatribut atau lebih tidak didukung.
- Nilai subatribute "jenis" dari atribut kompleks multinilai harus unik. Misalnya, tidak boleh ada dua alamat email yang berbeda dengan subjenis "kerja".
- Header untuk semua respons harus berjenis konten: application/scim+json
Mengambil Sumber Daya:
- Respons terhadap permintaan kueri/filter harus selalu berupa
ListResponse
. - Microsoft Entra-only menggunakan operator berikut:
eq
,and
- Atribut tempat sumber daya dapat dikueri harus ditetapkan sebagai atribut yang cocok pada aplikasi, lihat Menyesuaikan Pemetaan Atribut Provisi Pengguna.
/Pengguna:
- Atribut pemberian izin tidak didukung.
- Atribut apa pun yang dianggap untuk keunikan pengguna harus dapat digunakan sebagai bagian dari kueri yang difilter. (misalnya, jika keunikan pengguna dievaluasi untuk userName dan email[type eq "work"], GET ke /Users dengan filter harus mengizinkan userName eq "user@contoso.com" dan emails[type eq "work"].value eq "user@contoso.com" queries.
/Kelompok:
- Grup bersifat opsional, tetapi hanya didukung jika implementasi SCIM mendukung permintaan PATCH .
- Grup harus memiliki keunikan pada nilai 'displayName' agar cocok dengan ID Microsoft Entra dan aplikasi SCIM. Keunikan bukanlah persyaratan protokol SCIM, tetapi merupakan persyaratan untuk mengintegrasikan titik akhir SCIM dengan ID Microsoft Entra.
/Skema (Penemuan skema):
- Sampel permintaan/respons
- Penemuan skema sedang digunakan pada aplikasi galeri tertentu. Penemuan skema adalah metode satu-satunya untuk menambahkan lebih banyak atribut ke skema aplikasi SCIM galeri yang ada. Penemuan skema saat ini tidak didukung pada aplikasi SCIM non-galeri kustom.
- Jika nilai tidak ada, jangan kirim nilai null.
- Nilai properti harus kasing unta (misalnya, readWrite).
- Harus mengembalikan respons daftar.
- Layanan provisi Microsoft Entra membuat permintaan /skema saat Anda menyimpan konfigurasi provisi. Permintaan juga dibuat saat Anda membuka halaman edit provisi. Atribut lain yang ditemukan muncul ke pelanggan dalam pemetaan atribut di bawah daftar atribut target. Penemuan skema hanya menyebabkan lebih banyak atribut target ditambahkan. Atribut tidak dihapus.
Provisi dan deprovisi pengguna
Diagram berikut menunjukkan pesan yang dikirim ID Microsoft Entra ke titik akhir SCIM untuk mengelola siklus hidup pengguna di penyimpanan identitas aplikasi Anda.
Provisi dan deprovisi grup
Provisi dan deprovisi grup bersifat opsional. Saat diimplementasikan dan diaktifkan, ilustrasi berikut menunjukkan pesan yang dikirim ID Microsoft Entra ke titik akhir SCIM untuk mengelola siklus hidup grup di penyimpanan identitas aplikasi Anda. Pesan tersebut berbeda dari pesan tentang pengguna dengan dua cara:
- Permintaan untuk mengambil grup menentukan bahwa atribut anggota akan dikecualikan dari sumber daya apa pun yang disediakan sebagai respons terhadap permintaan.
- Permintaan untuk menentukan apakah atribut referensi memiliki nilai tertentu adalah permintaan tentang atribut anggota.
Diagram berikut menunjukkan urutan deprovisi grup:
Permintaan dan respons protokol SCIM
Artikel ini menyediakan contoh permintaan SCIM yang dikeluarkan oleh layanan provisi Microsoft Entra dan contoh respons yang diharapkan. Untuk hasil terbaik, Anda harus membuat kode aplikasi untuk menangani permintaan ini dalam format ini dan memancarkan respons yang diharapkan.
Penting
Untuk memahami bagaimana dan kapan layanan provisi pengguna Microsoft Entra memancarkan operasi yang dijelaskan dalam contoh, lihat bagian Siklus provisi: Awal dan bertahap dalam Cara kerja provisi.
- Buat Pengguna (Respons Permintaan / )
- Dapatkan Pengguna (Respons Permintaan / )
- Dapatkan Pengguna menurut kueri (Respons Permintaan / )
- Dapatkan Pengguna menurut kueri - Hasil nol (Respons Permintaan / )
- Memperbarui Pengguna [Properti multinilai] (Respons Permintaan / )
- Perbarui Pengguna [Properti bernilai tunggal] (Respons Permintaan / )
- Nonaktifkan Pengguna (Respons Permintaan / )
- Hapus Pengguna (Respons Permintaan / )
- Buat Grup (Respons Permintaan / )
- Dapatkan Grup (Respons Permintaan / )
- Dapatkan Grup menurut displayName (Respons Permintaan / )
- Perbarui Grup [Atribut non-anggota] (Respons Permintaan / )
- Perbarui Grup [Tambahkan Anggota] (Respons Permintaan / )
- Perbarui Grup [Hapus Anggota] (Respons Permintaan / )
- Hapus Grup (Respons Permintaan / )
Operasi Pengguna
- Gunakan
userName
atauemails[type eq "work"]
atribut untuk mengkueri pengguna.
Buat Pengguna
Minta
POST /Users
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
"externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
"userName": "Test_User_00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"active": true,
"emails": [{
"primary": true,
"type": "work",
"value": "Test_User_11bb11bb-cc22-dd33-ee44-55ff55ff55ff@testuser.com"
}],
"meta": {
"resourceType": "User"
},
"name": {
"formatted": "givenName familyName",
"familyName": "familyName",
"givenName": "givenName"
},
"roles": []
}
Jawaban
HTTP/1.1 201 Dibuat
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "48af03ac28ad4fb88478",
"externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
"meta": {
"resourceType": "User",
"created": "2018-03-27T19:59:26.000Z",
"lastModified": "2018-03-27T19:59:26.000Z"
},
"userName": "Test_User_00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"name": {
"formatted": "givenName familyName",
"familyName": "familyName",
"givenName": "givenName",
},
"active": true,
"emails": [{
"value": "Test_User_11bb11bb-cc22-dd33-ee44-55ff55ff55ff@testuser.com",
"type": "work",
"primary": true
}]
}
Dapatkan Pengguna
Minta
GET /Users/5d48a0a8e9f04aa38008
Respons (Pengguna ditemukan)
HTTP/1.1 200 OK
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "5d48a0a8e9f04aa38008",
"externalId": "58342554-38d6-4ec8-948c-50044d0a33fd",
"meta": {
"resourceType": "User",
"created": "2018-03-27T19:59:26.000Z",
"lastModified": "2018-03-27T19:59:26.000Z"
},
"userName": "Test_User_00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"name": {
"formatted": "givenName familyName",
"familyName": "familyName",
"givenName": "givenName",
},
"active": true,
"emails": [{
"value": "Test_User_11bb11bb-cc22-dd33-ee44-55ff55ff55ff@testuser.com",
"type": "work",
"primary": true
}]
}
Minta
GET /Users/5171a35d82074e068ce2
Respons (Pengguna tidak ditemukan. Detail tidak diperlukan, hanya status.)
HTTP/1.1 404 Tidak Ditemukan
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "404",
"detail": "Resource 23B51B0E5D7AE9110A49411D@7cca31655d49f3640a494224 not found"
}
Dapatkan Pengguna menurut kueri
Minta
GET /Users?filter=userName eq "Test_User_00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
Jawaban
HTTP/1.1 200 OK
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 1,
"Resources": [{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "2441309d85324e7793ae",
"externalId": "7fce0092-d52e-4f76-b727-3955bd72c939",
"meta": {
"resourceType": "User",
"created": "2018-03-27T19:59:26.000Z",
"lastModified": "2018-03-27T19:59:26.000Z"
},
"userName": "Test_User_00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"name": {
"familyName": "familyName",
"givenName": "givenName"
},
"active": true,
"emails": [{
"value": "Test_User_11bb11bb-cc22-dd33-ee44-55ff55ff55ff@testuser.com",
"type": "work",
"primary": true
}]
}],
"startIndex": 1,
"itemsPerPage": 20
}
Dapatkan Pengguna menurut kueri - Hasil nol
Minta
GET /Users?filter=userName eq "non-existent user"
Jawaban
HTTP/1.1 200 OK
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 0,
"Resources": [],
"startIndex": 1,
"itemsPerPage": 20
}
Perbarui Pengguna [Properti multinilai]
Minta
PATCH /Users/6764549bef60420686bc HTTP/1.1
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "Replace",
"path": "emails[type eq \"work\"].value",
"value": "updatedEmail@microsoft.com"
},
{
"op": "Replace",
"path": "name.familyName",
"value": "updatedFamilyName"
}
]
}
Jawaban
HTTP/1.1 200 OK
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "6764549bef60420686bc",
"externalId": "6c75de36-30fa-4d2d-a196-6bdcdb6b6539",
"meta": {
"resourceType": "User",
"created": "2018-03-27T19:59:26.000Z",
"lastModified": "2018-03-27T19:59:26.000Z"
},
"userName": "Test_User_00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"name": {
"formatted": "givenName updatedFamilyName",
"familyName": "updatedFamilyName",
"givenName": "givenName"
},
"active": true,
"emails": [{
"value": "updatedEmail@microsoft.com",
"type": "work",
"primary": true
}]
}
Perbarui Pengguna [Properti bernilai tunggal]
Minta
PATCH /Users/5171a35d82074e068ce2 HTTP/1.1
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [{
"op": "Replace",
"path": "userName",
"value": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com"
}]
}
Jawaban
HTTP/1.1 200 OK
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "5171a35d82074e068ce2",
"externalId": "aa1eca08-7179-4eeb-a0be-a519f7e5cd1a",
"meta": {
"resourceType": "User",
"created": "2018-03-27T19:59:26.000Z",
"lastModified": "2018-03-27T19:59:26.000Z"
},
"userName": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com",
"name": {
"formatted": "givenName familyName",
"familyName": "familyName",
"givenName": "givenName",
},
"active": true,
"emails": [{
"value": "Test_User_11bb11bb-cc22-dd33-ee44-55ff55ff55ff@testuser.com",
"type": "work",
"primary": true
}]
}
Nonaktifkan Pengguna
Minta
PATCH /Users/5171a35d82074e068ce2 HTTP/1.1
{
"Operations": [
{
"op": "Replace",
"path": "active",
"value": false
}
],
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
]
}
Jawaban
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"id": "CEC50F275D83C4530A495FCF@834d0e1e5d8235f90a495fda",
"userName": "deanruiz@testuser.com",
"name": {
"familyName": "Harris",
"givenName": "Larry"
},
"active": false,
"emails": [
{
"value": "gloversuzanne@testuser.com",
"type": "work",
"primary": true
}
],
"addresses": [
{
"country": "ML",
"type": "work",
"primary": true
}
],
"meta": {
"resourceType": "Users",
"location": "/scim/5171a35d82074e068ce2/Users/CEC50F265D83B4530B495FCF@5171a35d82074e068ce2"
}
}
Hapus Pengguna
Minta
DELETE /Users/5171a35d82074e068ce2 HTTP/1.1
Jawaban
HTTP/1.1 204 Tanpa Konten
Operasi Grup
- Grup dibuat dengan daftar anggota kosong.
displayName
Gunakan atribut untuk mengkueri grup.- Pembaruan pada permintaan PATCH grup harus menghasilkan HTTP 204 Tanpa Konten dalam respons. Mengembalikan isi dengan daftar semua anggota tidak disarankan.
- Tidak perlu mendukung pengembalian semua anggota grup.
Buat Grup
Minta
POST /Groups HTTP/1.1
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group", "http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/2.0/Group"],
"externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
"displayName": "displayName",
"meta": {
"resourceType": "Group"
}
}
Jawaban
HTTP/1.1 201 Dibuat
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"id": "927fa2c08dcb4a7fae9e",
"externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
"meta": {
"resourceType": "Group",
"created": "2018-03-27T19:59:26.000Z",
"lastModified": "2018-03-27T19:59:26.000Z"
},
"displayName": "displayName",
"members": []
}
Dapatkan Grup
Minta
GET /Groups/40734ae655284ad3abcc?excludedAttributes=members HTTP/1.1
Jawaban
HTTP/1.1 200 OK
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"id": "40734ae655284ad3abcc",
"externalId": "60f1bb27-2e1e-402d-bcc4-ec999564a194",
"meta": {
"resourceType": "Group",
"created": "2018-03-27T19:59:26.000Z",
"lastModified": "2018-03-27T19:59:26.000Z"
},
"displayName": "displayName",
}
Dapatkan Grup menurut displayName
Minta
GET /Groups?excludedAttributes=members&filter=displayName eq "displayName" HTTP/1.1
Jawaban
HTTP/1.1 200 OK
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 1,
"Resources": [{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"id": "8c601452cc934a9ebef9",
"externalId": "0db508eb-91e2-46e4-809c-30dcbda0c685",
"meta": {
"resourceType": "Group",
"created": "2018-03-27T22:02:32.000Z",
"lastModified": "2018-03-27T22:02:32.000Z",
},
"displayName": "displayName",
}],
"startIndex": 1,
"itemsPerPage": 20
}
Perbarui Grup [Atribut non-anggota]
Minta
PATCH /Groups/fa2ce26709934589afc5 HTTP/1.1
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [{
"op": "Replace",
"path": "displayName",
"value": "1879db59-3bdf-4490-ad68-ab880a269474updatedDisplayName"
}]
}
Jawaban
HTTP/1.1 204 Tanpa Konten
Perbarui Grup [Tambahkan Anggota]
Minta
PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [{
"op": "Add",
"path": "members",
"value": [{
"$ref": null,
"value": "f648f8d5ea4e4cd38e9c"
}]
}]
}
Jawaban
HTTP/1.1 204 Tanpa Konten
Perbarui Grup [Hapus Anggota]
Minta
PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [{
"op": "Remove",
"path": "members",
"value": [{
"$ref": null,
"value": "f648f8d5ea4e4cd38e9c"
}]
}]
}
Jawaban
HTTP/1.1 204 Tanpa Konten
Hapus Grup
Minta
DELETE /Groups/cdb1ce18f65944079d37 HTTP/1.1
Jawaban
HTTP/1.1 204 Tanpa Konten
Penemuan skema
Menemukan skema
Minta
GET /Schemas
Jawaban
HTTP/1.1 200 OK
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"itemsPerPage": 50,
"startIndex": 1,
"totalResults": 3,
"Resources": [
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
"id" : "urn:ietf:params:scim:schemas:core:2.0:User",
"name" : "User",
"description" : "User Account",
"attributes" : [
{
"name" : "userName",
"type" : "string",
"multiValued" : false,
"description" : "Unique identifier for the User, typically
used by the user to directly authenticate to the service provider.
Each User MUST include a non-empty userName value. This identifier
MUST be unique across the service provider's entire set of Users.
REQUIRED.",
"required" : true,
"caseExact" : false,
"mutability" : "readWrite",
"returned" : "default",
"uniqueness" : "server"
},
],
"meta" : {
"resourceType" : "Schema",
"location" :
"/v2/Schemas/urn:ietf:params:scim:schemas:core:2.0:User"
}
},
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
"id" : "urn:ietf:params:scim:schemas:core:2.0:Group",
"name" : "Group",
"description" : "Group",
"attributes" : [
{
"name" : "displayName",
"type" : "string",
"multiValued" : false,
"description" : "A human-readable name for the Group.
REQUIRED.",
"required" : false,
"caseExact" : false,
"mutability" : "readWrite",
"returned" : "default",
"uniqueness" : "none"
},
],
"meta" : {
"resourceType" : "Schema",
"location" :
"/v2/Schemas/urn:ietf:params:scim:schemas:core:2.0:Group"
}
},
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
"id" : "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
"name" : "EnterpriseUser",
"description" : "Enterprise User",
"attributes" : [
{
"name" : "employeeNumber",
"type" : "string",
"multiValued" : false,
"description" : "Numeric or alphanumeric identifier assigned
to a person, typically based on order of hire or association with an
organization.",
"required" : false,
"caseExact" : false,
"mutability" : "readWrite",
"returned" : "default",
"uniqueness" : "none"
},
],
"meta" : {
"resourceType" : "Schema",
"location" :
"/v2/Schemas/urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
}
}
]
}
Persyaratan keamanan
Versi Protokol TLS
Satu-satunya versi protokol yang dapat diterima adalah TLS 1.2. Tidak ada versi SSL/TLS lain yang diizinkan.
- Kunci RSA harus minimal 2.048 bit.
- Kunci ECC harus setidaknya 256 bit, dihasilkan menggunakan kurva elips yang disetujui
Panjang Kunci
Semua layanan harus menggunakan sertifikat X.509 yang dihasilkan menggunakan kunci kriptografi dengan panjang yang cukup, yang berarti:
Suite Cipher
Semua layanan harus dikonfigurasi untuk menggunakan cipher suite berikut, dalam urutan yang tepat yang ditentukan dalam contoh. Jika Anda hanya memiliki sertifikat RSA, suite sandi ECDSA yang diinstal tidak berpengaruh apa pun.
Bilah minimum TLS 1.2 Cipher Suites:
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
Rentang IP
Layanan provisi Microsoft Entra saat ini beroperasi di bawah Rentang IP untuk ID Microsoft Entra seperti yang tercantum di sini. Anda dapat menambahkan rentang IP yang tercantum di bawah AzureActiveDirectory
tag untuk mengizinkan lalu lintas dari layanan provisi Microsoft Entra ke dalam aplikasi Anda. Anda perlu meninjau daftar rentang IP dengan hati-hati untuk alamat komputasi. Alamat seperti '40.126.25.32' dapat diwakili dalam daftar rentang IP sebagai '40.126.0.0/18'. Anda juga dapat mengambil daftar rentang IP secara terprogram menggunakan API berikut.
MICROSOFT Entra ID juga mendukung solusi berbasis agen untuk menyediakan konektivitas ke aplikasi di jaringan privat (lokal, dihosting di Azure, dihosting di AWS, dan sebagainya). Pelanggan dapat menyebarkan agen ringan, yang menyediakan konektivitas ke ID Microsoft Entra tanpa membuka port masuk apa pun, di server di jaringan privat mereka. Pelajari selengkapnya di sini.
Membangun titik akhir SCIM
Sekarang setelah Anda merancang skema dan memahami implementasi Microsoft Entra SCIM, Anda dapat mulai mengembangkan titik akhir SCIM Anda. Daripada memulai dari awal dan membangun implementasi sepenuhnya sendiri, Anda dapat mengandalkan banyak pustaka SCIM sumber terbuka yang diterbitkan oleh komunitas SCIM.
Untuk panduan tentang cara membangun titik akhir SCIM termasuk contoh, lihat Mengembangkan sampel titik akhir SCIM.
Contoh kode referensi .NET Core sumber terbuka yang diterbitkan oleh tim provisi Microsoft Entra adalah salah satu sumber daya seperti itu yang dapat memulai pengembangan Anda. Buat titik akhir SCIM, lalu uji dengan menjalankan permintaan/respons sampel yang disediakan.
Nota
Kode referensi dimaksudkan untuk membantu Anda mulai membangun titik akhir SCIM Anda dan disediakan "APA ADANYA." Kontribusi dari komunitas dipersilakan untuk membantu membangun dan memelihara kode.
Solusi ini terdiri dari dua proyek, Microsoft.SCIM dan Microsoft.SCIM.WebHostSample.
Proyek Microsoft.SCIM adalah pustaka yang menentukan komponen layanan web yang sesuai dengan spesifikasi SCIM. Ini menyatakan antarmuka Microsoft.SCIM.IProvider, permintaan diterjemahkan ke dalam panggilan ke metode penyedia, yang akan diprogram untuk beroperasi di penyimpanan identitas.
Proyek Microsoft.SCIM.WebHostSample adalah ASP.NET Core Web Application, berdasarkan templat Kosong . Ini memungkinkan kode sampel disebarkan sebagai mandiri, dihosting dalam kontainer atau dalam Layanan Informasi Internet. Ini juga mengimplementasikan antarmuka Microsoft.SCIM.IProvider yang menyimpan kelas dalam memori sebagai penyimpanan identitas sampel.
public class Startup
{
...
public IMonitor MonitoringBehavior { get; set; }
public IProvider ProviderBehavior { get; set; }
public Startup(IWebHostEnvironment env, IConfiguration configuration)
{
...
this.MonitoringBehavior = new ConsoleMonitor();
this.ProviderBehavior = new InMemoryProvider();
}
...
Membangun titik akhir SCIM kustom
Titik akhir SCIM harus memiliki alamat HTTP dan sertifikat autentikasi server yang otoritas sertifikasi akarnya adalah salah satu nama berikut:
- CNNIC
- Comodo
- CyberTrust
- DigiCert
- GeoTrust
- GlobalSign
- Pergi Ayah
- VeriSign
- WoSign
- DST Root CA X3
.NET Core SDK menyertakan sertifikat pengembangan HTTPS yang digunakan selama pengembangan. Sertifikat diinstal sebagai bagian dari pengalaman eksekusi pertama. Bergantung pada cara Anda menjalankan Aplikasi Web ASP.NET Core yang didengarkannya ke port yang berbeda:
- Microsoft.SCIM.WebHostSample:
https://localhost:5001
- IIS Express:
https://localhost:44359
Untuk informasi selengkapnya tentang HTTPS di ASP.NET Core, gunakan tautan berikut: Menerapkan HTTPS di ASP.NET Core
Menangani autentikasi titik akhir
Permintaan dari layanan provisi Microsoft Entra mencakup token pembawa OAuth 2.0. Server otorisasi mengeluarkan token pembawa. ID Microsoft Entra adalah contoh server otorisasi tepercaya. Konfigurasikan layanan provisi Microsoft Entra untuk menggunakan salah satu token berikut:
Token pembawa berumur panjang. Jika titik akhir SCIM memerlukan token pembawa OAuth dari penerbit selain ID Microsoft Entra, salin token pembawa OAuth yang diperlukan ke bidang Token Rahasia opsional. Di lingkungan pengembangan, Anda dapat menggunakan token pengujian dari
/scim/token
titik akhir. Token pengujian tidak boleh digunakan di lingkungan produksi.Token pembawa Microsoft Entra. Jika bidang Token Rahasia dibiarkan kosong, ID Microsoft Entra menyertakan token pembawa OAuth yang dikeluarkan dari ID Microsoft Entra dengan setiap permintaan. Aplikasi yang menggunakan ID Microsoft Entra sebagai idP dapat memvalidasi token yang dikeluarkan ID Microsoft Entra ini.
- Aplikasi yang menerima permintaan harus memvalidasi penerbit token sebagai ID Microsoft Entra untuk penyewa Microsoft Entra yang diharapkan.
iss
Klaim mengidentifikasi penerbit token. Misalnya,"iss":"https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/"
. Dalam contoh ini, alamat dasar nilai klaim,https://sts.windows.net
mengidentifikasi ID Microsoft Entra sebagai penerbit, sementara segmen alamat relatif, aaaabbbb-0000-cc-1111-dddd2222eeee, adalah pengidentifikasi unik penyewa Microsoft Entra tempat token dikeluarkan.- Audiens untuk token adalah ID Aplikasi untuk aplikasi di galeri. Aplikasi yang terdaftar dalam satu penyewa menerima klaim yang sama
iss
dengan permintaan SCIM. ID aplikasi untuk semua aplikasi kustom adalah 8adf8e6e-67b2-4cf2-a259-e3dc5476c621. Token yang dihasilkan oleh ID Microsoft Entra hanya boleh digunakan untuk pengujian. Ini tidak boleh digunakan di lingkungan produksi.
Dalam kode sampel, permintaan diautentikasi menggunakan paket Microsoft.AspNetCore.Authentication.JwtBearer. Kode berikut memberlakukan bahwa permintaan ke salah satu titik akhir layanan diautentikasi menggunakan token pembawa yang dikeluarkan oleh ID Microsoft Entra untuk penyewa tertentu:
public void ConfigureServices(IServiceCollection services)
{
if (_env.IsDevelopment())
{
...
}
else
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.Authority = " https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/";
options.Audience = "8adf8e6e-67b2-4cf2-a259-e3dc5476c621";
...
});
}
...
}
public void Configure(IApplicationBuilder app)
{
...
app.UseAuthentication();
app.UseAuthorization();
...
}
Kode sampel menggunakan lingkungan ASP.NET Core untuk mengubah opsi autentikasi selama tahap pengembangan dan mengaktifkan penggunaan token yang ditandatangani sendiri.
Untuk informasi selengkapnya tentang beberapa lingkungan di ASP.NET Core, lihat Menggunakan beberapa lingkungan di ASP.NET Core.
Kode berikut memberlakukan bahwa permintaan ke salah satu titik akhir layanan diautentikasi menggunakan token pembawa yang ditandatangani dengan kunci kustom:
public void ConfigureServices(IServiceCollection services)
{
if (_env.IsDevelopment())
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters =
new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = false,
ValidateIssuerSigningKey = false,
ValidIssuer = "Microsoft.Security.Bearer",
ValidAudience = "Microsoft.Security.Bearer",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("A1B2C3D4E5F6A1B2C3D4E5F6"))
};
});
}
...
Kirim permintaan GET ke pengontrol Token untuk mendapatkan token pembawa yang valid, metode GenerateJSONWebToken bertanggung jawab untuk membuat token yang cocok dengan parameter yang dikonfigurasi untuk pengembangan:
private string GenerateJSONWebToken()
{
// Create token key
SymmetricSecurityKey securityKey =
new SymmetricSecurityKey(Encoding.UTF8.GetBytes("A1B2C3D4E5F6A1B2C3D4E5F6"));
SigningCredentials credentials =
new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
// Set token expiration
DateTime startTime = DateTime.UtcNow;
DateTime expiryTime = startTime.AddMinutes(120);
// Generate the token
JwtSecurityToken token =
new JwtSecurityToken(
"Microsoft.Security.Bearer",
"Microsoft.Security.Bearer",
null,
notBefore: startTime,
expires: expiryTime,
signingCredentials: credentials);
string result = new JwtSecurityTokenHandler().WriteToken(token);
return result;
}
Menangani provisi dan deprovisi pengguna
Contoh 1. Mengkueri layanan untuk pengguna yang cocok
ID Microsoft Entra meminta layanan untuk pengguna dengan nilai atribut yang externalId
cocok dengan nilai atribut mailNickname pengguna di ID Microsoft Entra. Kueri dinyatakan sebagai permintaan Hypertext Transfer Protocol (HTTP) seperti contoh ini, di mana jyoung adalah sampel mailNickname pengguna di ID Microsoft Entra.
Nota
Ini adalah contoh saja. Tidak semua pengguna akan memiliki atribut mailNickname, dan nilai yang dimiliki pengguna mungkin tidak unik dalam direktori. Selain itu, atribut yang digunakan untuk pencocokan (yang dalam hal externalId
ini ) dapat dikonfigurasi dalam pemetaan atribut Microsoft Entra.
GET https://.../scim/Users?filter=externalId eq jyoung HTTP/1.1
Authorization: Bearer ...
Dalam kode sampel, permintaan diterjemahkan ke dalam panggilan ke metode QueryAsync penyedia layanan. Berikut adalah tanda tangan metode itu:
// System.Threading.Tasks.Tasks is defined in mscorlib.dll.
// Microsoft.SCIM.IRequest is defined in
// Microsoft.SCIM.Service.
// Microsoft.SCIM.Resource is defined in
// Microsoft.SCIM.Schemas.
// Microsoft.SCIM.IQueryParameters is defined in
// Microsoft.SCIM.Protocol.
Task<Resource[]> QueryAsync(IRequest<IQueryParameters> request);
Dalam kueri sampel, untuk pengguna dengan nilai tertentu untuk externalId
atribut , nilai argumen yang diteruskan ke metode QueryAsync adalah:
- Parameter. AlternateFilters.Count: 1
- Parameter. AlternateFilters.ElementAt(0). AttributePath: "externalId"
- Parameter. AlternateFilters.ElementAt(0). PerbandinganOperator: PerbandinganOperator.Equals
- Parameter. AlternateFilter.ElementAt(0). Nilai Perbandingan: "jyoung"
Contoh 2. Memprovisikan pengguna
Jika respons terhadap kueri ke titik akhir SCIM untuk pengguna dengan nilai atribut yang cocok dengan externalId
nilai atribut mailNickname pengguna tidak mengembalikan pengguna apa pun, maka ID Microsoft Entra meminta agar layanan menyediakan pengguna yang sesuai dengan yang ada di ID Microsoft Entra. Berikut adalah contoh permintaan seperti itu:
POST https://.../scim/Users HTTP/1.1
Authorization: Bearer ...
Content-type: application/scim+json
{
"schemas":
[
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0User"],
"externalId":"jyoung",
"userName":"jyoung@testuser.com",
"active":true,
"addresses":null,
"displayName":"Joy Young",
"emails": [
{
"type":"work",
"value":"jyoung@Contoso.com",
"primary":true}],
"meta": {
"resourceType":"User"},
"name":{
"familyName":"Young",
"givenName":"Joy"},
"phoneNumbers":null,
"preferredLanguage":null,
"title":null,
"department":null,
"manager":null}
Dalam kode sampel, permintaan diterjemahkan ke dalam panggilan ke metode CreateAsync penyedia layanan. Berikut adalah tanda tangan metode itu:
// System.Threading.Tasks.Tasks is defined in mscorlib.dll.
// Microsoft.SCIM.IRequest is defined in
// Microsoft.SCIM.Service.
// Microsoft.SCIM.Resource is defined in
// Microsoft.SCIM.Schemas.
Task<Resource> CreateAsync(IRequest<Resource> request);
Dalam permintaan provisi pengguna, nilai argumen sumber daya adalah instans Microsoft.SCIM.Core2EnterpriseUser
kelas . Kelas ini didefinisikan dalam Microsoft.SCIM.Schemas
pustaka. Jika permintaan untuk memprovisikan pengguna berhasil, maka implementasi metode diharapkan mengembalikan instans Microsoft.SCIM.Core2EnterpriseUser
kelas. Nilai Identifier
properti diatur ke pengidentifikasi unik pengguna yang baru disediakan.
Contoh 3. Mengkueri status pengguna saat ini
ID Microsoft Entra meminta status pengguna yang ditentukan saat ini dari layanan dengan permintaan seperti:
GET ~/scim/Users/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 HTTP/1.1
Authorization: Bearer ...
Dalam kode sampel, permintaan diterjemahkan ke dalam panggilan ke metode RetrieveAsync penyedia layanan. Berikut adalah tanda tangan metode itu:
// System.Threading.Tasks.Tasks is defined in mscorlib.dll.
// Microsoft.SCIM.IRequest is defined in
// Microsoft.SCIM.Service.
// Microsoft.SCIM.Resource and
// Microsoft.SCIM.IResourceRetrievalParameters
// are defined in Microsoft.SCIM.Schemas
Task<Resource> RetrieveAsync(IRequest<IResourceRetrievalParameters> request);
Dalam contoh permintaan, untuk mengambil status pengguna saat ini, nilai properti objek yang disediakan sebagai nilai argumen parameter adalah sebagai berikut:
- Pengidentifikasi: "a0a0a0a0-bbbb-cc-dddd-e1e1e1e1e1e1"
- Pengidentifikasi skema:
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User
Contoh 4. Mengkueri nilai atribut referensi yang akan diperbarui
MICROSOFT Entra ID memeriksa nilai atribut saat ini di penyimpanan identitas sebelum memperbaruinya. Namun, hanya atribut manajer yang diperiksa terlebih dahulu untuk pengguna. Berikut adalah contoh permintaan untuk menentukan apakah atribut manajer objek pengguna saat ini memiliki nilai tertentu: Dalam kode sampel, permintaan diterjemahkan ke dalam panggilan ke metode QueryAsync penyedia layanan. Nilai properti objek yang disediakan sebagai nilai argumen parameter adalah sebagai berikut:
- Parameter. AlternateFilters.Count: 2
- Parameter. AlternateFilters.ElementAt(x). AttributePath: "ID"
- Parameter. AlternateFilters.ElementAt(x). PerbandinganOperator: PerbandinganOperator.Equals
- Parameter. AlternateFilter.ElementAt(x). ComparisonValue: "a0a0a0a0-bbbb-cc-dddd-e1e1e1e1e1e1e1"
- Parameter. AlternateFilters.ElementAt(y). AttributePath: "manager"
- Parameter. AlternateFilters.ElementAt(y). PerbandinganOperator: PerbandinganOperator.Equals
- Parameter. AlternateFilter.ElementAt(y). Nilai Perbandingan: "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
- Parameter. RequestedAttributePaths.ElementAt(0): "ID"
- Parameter. Pengidentifikasi skema:
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User
Nilai indeks x bisa dan 0
nilai indeks y bisa .1
Atau nilai x bisa dan 1
nilai y bisa .0
Ini tergantung pada urutan ekspresi parameter kueri filter.
Contoh 5. Permintaan dari ID Microsoft Entra ke titik akhir SCIM untuk memperbarui pengguna
Berikut adalah contoh permintaan dari ID Microsoft Entra ke titik akhir SCIM untuk memperbarui pengguna:
PATCH ~/scim/Users/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 HTTP/1.1
Authorization: Bearer ...
Content-type: application/scim+json
{
"schemas":
[
"urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations":
[
{
"op":"Add",
"path":"manager",
"value":
[
{
"$ref":"http://.../scim/Users/00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"value":"00aa00aa-bb11-cc22-dd33-44ee44ee44ee"}]}]}
Dalam kode sampel, permintaan diterjemahkan ke dalam panggilan ke metode UpdateAsync penyedia layanan. Berikut adalah tanda tangan metode itu:
// System.Threading.Tasks.Tasks and
// System.Collections.Generic.IReadOnlyCollection<T> // are defined in mscorlib.dll.
// Microsoft.SCIM.IRequest is defined in
// Microsoft.SCIM.Service.
// Microsoft.SCIM.IPatch,
// is defined in Microsoft.SCIM.Protocol.
Task UpdateAsync(IRequest<IPatch> request);
Dalam contoh permintaan, untuk memperbarui pengguna, objek yang disediakan sebagai nilai argumen patch memiliki nilai properti ini:
Argumen | Nilai |
---|---|
ResourceIdentifier.Identifier |
"a0a0a0a0-bbbb-cc-dddd-e1e1e1e1e1e1e1" |
ResourceIdentifier.SchemaIdentifier |
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User |
(PatchRequest as PatchRequest2).Operations.Count |
1 |
(PatchRequest as PatchRequest2).Operations.ElementAt(0).OperationName |
OperationName.Add |
(PatchRequest as PatchRequest2).Operations.ElementAt(0).Path.AttributePath |
Manajer |
(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.Count |
1 |
(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Reference |
http://.../scim/Users/00aa00aa-bb11-cc22-dd33-44ee44ee44ee |
(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Value |
00aa00aa-bb11-cc22-dd33-44ee44ee44ee |
Contoh 6. Membatalkan provisi pengguna
Untuk mencabut akses pengguna dari penyimpanan identitas yang dihadapkan oleh titik akhir SCIM, MICROSOFT Entra ID mengirimkan permintaan seperti:
DELETE ~/scim/Users/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 HTTP/1.1
Authorization: Bearer ...
Dalam kode sampel, permintaan diterjemahkan ke dalam panggilan ke metode DeleteAsync penyedia layanan. Berikut adalah tanda tangan metode itu:
// System.Threading.Tasks.Tasks is defined in mscorlib.dll.
// Microsoft.SCIM.IRequest is defined in
// Microsoft.SCIM.Service.
// Microsoft.SCIM.IResourceIdentifier,
// is defined in Microsoft.SCIM.Protocol.
Task DeleteAsync(IRequest<IResourceIdentifier> request);
Objek yang disediakan sebagai nilai argumen resourceIdentifier memiliki nilai properti ini dalam contoh permintaan untuk mencabut provisi pengguna:
- ResourceIdentifier.Identifier: "a0a0a0a0-bbbb-cc-dddd-e1e1e1e1e1e1e1"
- ResourceIdentifier.SchemaIdentifier:
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User
Mengintegrasikan titik akhir SCIM Anda dengan layanan provisi Microsoft Entra
ID Microsoft Entra dapat dikonfigurasi untuk memprovisikan pengguna dan grup yang ditetapkan secara otomatis ke aplikasi yang menerapkan profil tertentu dari protokol SCIM 2.0. Spesifikasi profil didokumentasikan dalam Memahami implementasi Microsoft Entra SCIM.
Tanyakan kepada penyedia aplikasi Anda, atau dokumentasi penyedia aplikasi Anda untuk pernyataan kompatibilitas dengan persyaratan ini.
Penting
Implementasi Microsoft Entra SCIM dibangun di atas layanan provisi pengguna Microsoft Entra, yang dirancang untuk terus menjaga pengguna tetap sinkron antara ID Microsoft Entra dan aplikasi target, dan menerapkan serangkaian operasi standar yang sangat spesifik. Penting untuk memahami perilaku ini untuk memahami perilaku layanan provisi Microsoft Entra. Untuk informasi selengkapnya, lihat bagian Siklus provisi: Awal dan bertahap dalam Cara kerja provisi.
Persiapan
Ujung
Langkah-langkah dalam artikel ini mungkin sedikit berbeda berdasarkan portal tempat Anda memulai.
Aplikasi yang mendukung profil SCIM yang dijelaskan dalam artikel ini dapat dihubungkan ke ID Microsoft Entra menggunakan fitur "aplikasi non-galeri" di galeri aplikasi Microsoft Entra. Setelah tersambung, MICROSOFT Entra ID menjalankan proses sinkronisasi. Proses berjalan setiap 40 menit. Proses ini meminta titik akhir SCIM aplikasi untuk pengguna dan grup yang ditetapkan, dan membuat atau memodifikasinya sesuai dengan detail penugasan.
Untuk menyambungkan aplikasi yang mendukung SCIM:
Masuk ke pusat admin Microsoft Entra sebagai setidaknya Administrator Aplikasi.
Telusuri aplikasi Identity>Applications>Enterprise.
Daftar semua aplikasi yang dikonfigurasi ditampilkan, termasuk aplikasi yang ditambahkan dari galeri.
Pilih + Aplikasi> baru+ Buat aplikasi Anda sendiri.
Masukkan nama untuk aplikasi Anda, pilih opsi "integrasikan aplikasi lain yang tidak Anda temukan di galeri" dan pilih Tambahkan untuk membuat objek aplikasi. Aplikasi baru ditambahkan ke daftar aplikasi perusahaan dan terbuka ke layar manajemen aplikasinya.
Cuplikan layar berikut menunjukkan galeri aplikasi Microsoft Entra:
Di layar manajemen aplikasi, pilih Provisi di panel kiri.
Di menu Mode Provisi, pilih Otomatis.
Cuplikan layar berikut menunjukkan konfigurasi pengaturan provisi di pusat admin Microsoft Entra:
Di bidang URL Penyewa, masukkan URL titik akhir SCIM aplikasi. Contoh:
https://api.contoso.com/scim/
Jika titik akhir SCIM memerlukan token pembawa OAuth dari penerbit selain ID Microsoft Entra, salin token pembawa OAuth yang diperlukan ke bidang Token Rahasia opsional. Jika bidang ini dibiarkan kosong, ID Microsoft Entra menyertakan token pembawa OAuth yang dikeluarkan dari ID Microsoft Entra dengan setiap permintaan. Aplikasi yang menggunakan ID Microsoft Entra sebagai idP dapat memvalidasi token yang dikeluarkan ID Microsoft Entra ini.
Nota
Tidak disarankan untuk membiarkan bidang ini kosong dan mengandalkan token yang dihasilkan oleh ID Microsoft Entra. Opsi ini terutama tersedia untuk tujuan pengujian.
Pilih Uji Koneksi agar MICROSOFT Entra ID mencoba menyambungkan ke titik akhir SCIM. Jika upaya gagal, informasi kesalahan ditampilkan.
Nota
Uji Koneksi meminta titik akhir SCIM untuk pengguna yang tidak ada, menggunakan GUID acak sebagai properti pencocokan yang dipilih dalam konfigurasi Microsoft Entra. Respons yang diharapkan benar adalah HTTP 200 OK dengan pesan SCIM ListResponse kosong.
Jika upaya untuk menyambungkan ke aplikasi berhasil, pilih Simpan untuk menyimpan kredensial admin.
Di bagian Pemetaan , ada dua set pemetaan atribut yang dapat dipilih: satu untuk objek pengguna dan satu untuk objek grup. Pilih masing-masing untuk meninjau atribut yang disinkronkan dari ID Microsoft Entra ke aplikasi Anda. Atribut yang dipilih sebagai properti Pencocokan digunakan untuk mencocokkan pengguna dan grup di aplikasi Anda untuk operasi pembaruan. Pilih Simpan untuk menerapkan perubahan apa pun.
Nota
Anda dapat secara opsional menonaktifkan sinkronisasi objek grup dengan menonaktifkan pemetaan "grup".
Di bawah Pengaturan, bidang Cakupan menentukan pengguna dan grup mana yang disinkronkan. Pilih Sinkronkan hanya pengguna dan grup yang ditetapkan (disarankan ) untuk hanya menyinkronkan pengguna dan grup yang ditetapkan di tab Pengguna dan grup .
Setelah konfigurasi Anda selesai, atur Status Provisi ke Aktif.
Pilih Simpan untuk memulai layanan provisi Microsoft Entra.
Jika menyinkronkan hanya pengguna dan grup yang ditetapkan (disarankan), pilih tab Pengguna dan grup . Kemudian, tetapkan pengguna atau grup yang ingin Anda sinkronkan.
Setelah siklus awal dimulai, Anda dapat memilih Log provisi di panel kiri untuk memantau kemajuan, yang menunjukkan semua tindakan yang dilakukan oleh layanan provisi di aplikasi Anda. Untuk informasi selengkapnya tentang cara membaca log provisi Microsoft Entra, lihat Melaporkan provisi akun pengguna otomatis.
Nota
Siklus awal membutuhkan waktu lebih lama untuk dilakukan daripada sinkronisasi selanjutnya, yang terjadi sekitar setiap 40 menit selama layanan berjalan.
Menerbitkan aplikasi Anda ke galeri aplikasi Microsoft Entra
Jika Anda membangun aplikasi yang digunakan oleh lebih dari satu penyewa, jadikan aplikasi tersebut tersedia di galeri aplikasi Microsoft Entra. Sangat mudah bagi organisasi untuk menemukan aplikasi dan mengonfigurasi provisi. Memublikasikan aplikasi Anda di galeri Microsoft Entra dan menyediakan provisi untuk orang lain itu mudah. Lihat langkah-langkahnya di sini. Microsoft bekerja sama dengan Anda untuk mengintegrasikan aplikasi Anda ke dalam galeri, menguji titik akhir Anda, dan merilis dokumentasi onboarding untuk pelanggan.
Daftar periksa onboarding galeri
Gunakan daftar periksa untuk onboarding aplikasi Anda dengan cepat dan pelanggan memiliki pengalaman penyebaran yang lancar. Informasi dikumpulkan dari Anda saat onboarding ke galeri.
- Mendukung titik akhir pengguna dan grup SCIM 2.0 (Hanya satu yang diperlukan tetapi keduanya direkomendasikan)
- Mendukung setidaknya 25 permintaan per detik per penyewa untuk memastikan bahwa pengguna dan grup disediakan dan dicabut aksesnya tanpa penundaan (Diperlukan)
- Membangun kontak rekayasa dan dukungan untuk memandu pelanggan memposting onboarding galeri (Diperlukan)
- 3 Kredensial pengujian yang tidak kedaluwarsa untuk aplikasi Anda (Diperlukan)
- Mendukung pemberian kode otorisasi OAuth atau token berumur panjang seperti yang dijelaskan dalam contoh (Diperlukan)
- Aplikasi OIDC harus memiliki setidaknya 1 peran (kustom atau default) yang ditentukan
- Membangun titik kontak rekayasa dan dukungan untuk mendukung pelanggan memposting onboarding galeri (Diperlukan)
- Mendukung penemuan skema (diperlukan)
- Dukungan memperbarui beberapa keanggotaan grup dengan satu PATCH
- Dokumentasikan titik akhir SCIM Anda secara publik
Otorisasi untuk menyediakan konektor di galeri aplikasi
Spesifikasi SCIM tidak menentukan skema khusus SCIM untuk autentikasi dan otorisasi dan bergantung pada penggunaan standar industri yang ada.
Metode otorisasi | Pro | Kontra | Dukung |
---|---|---|---|
Nama pengguna dan kata sandi (tidak direkomendasikan atau didukung oleh ID Microsoft Entra) | Mudah diimplementasikan | Tidak aman - Pa$$word Anda tidak masalah | Tidak didukung untuk galeri baru atau aplikasi non-galeri. |
Token pembawa berumur panjang | Token berumur panjang tidak mengharuskan pengguna untuk hadir. Admin mudah digunakan saat menyiapkan provisi. | Token berumur panjang bisa sulit dibagikan dengan admin tanpa menggunakan metode yang tidak aman seperti email. | Didukung untuk aplikasi galeri dan non-galeri. |
Pemberian kode otorisasi OAuth | Token akses memiliki masa pakai yang lebih pendek daripada kata sandi, dan memiliki mekanisme refresh otomatis yang tidak dimiliki token pembawa berumur panjang. Pengguna nyata harus ada selama otorisasi awal, menambahkan tingkat akuntabilitas. | Mengharuskan pengguna untuk hadir. Jika pengguna meninggalkan organisasi, token tidak valid, dan otorisasi perlu diselesaikan lagi. | Didukung untuk aplikasi galeri, tetapi bukan aplikasi non-galeri. Namun, Anda dapat memberikan token akses di UI sebagai token rahasia untuk tujuan pengujian jangka pendek. Dukungan untuk pemberian kode OAuth di non-galeri ada di backlog kami, selain dukungan untuk URL autentikasi / token yang dapat dikonfigurasi di aplikasi galeri. |
Pemberian kredensial klien OAuth | Token akses memiliki masa pakai yang lebih pendek daripada kata sandi, dan memiliki mekanisme refresh otomatis yang tidak dimiliki token pembawa berumur panjang. Pemberian kode otorisasi dan pemberian kredensial klien membuat jenis token akses yang sama, sehingga berpindah di antara metode ini transparan ke API. Provisi dapat diotomatisasi, dan token baru dapat diminta secara diam-diam tanpa interaksi pengguna. | Didukung untuk aplikasi galeri, tetapi bukan aplikasi non-galeri. Namun, Anda dapat memberikan token akses di UI sebagai token rahasia untuk tujuan pengujian jangka pendek. Dukungan untuk pemberian kredensial klien OAuth di non-galeri ada di backlog kami. |
Nota
Tidak disarankan untuk membiarkan bidang token kosong di antarmuka pengguna aplikasi kustom konfigurasi provisi Microsoft Entra. Token yang dihasilkan terutama tersedia untuk tujuan pengujian.
Alur pemberian kode OAuth
Layanan provisi mendukung pemberian kode otorisasi dan setelah mengirimkan permintaan Anda untuk menerbitkan aplikasi Anda di galeri, tim kami akan bekerja sama dengan Anda untuk mengumpulkan informasi berikut:
URL Otorisasi, URL oleh klien untuk mendapatkan otorisasi dari pemilik sumber daya melalui pengalihan agen pengguna. Pengguna dialihkan ke URL ini untuk mengotorisasi akses.
URL pertukaran token, URL oleh klien untuk menukar pemberian otorisasi dengan token akses, biasanya dengan autentikasi klien.
ID klien, server otorisasi mengeluarkan klien terdaftar pengidentifikasi klien, yang merupakan string unik yang mewakili informasi pendaftaran yang disediakan oleh klien. Pengidentifikasi klien bukan rahasia; ini diekspos ke pemilik sumber daya dan tidak boleh digunakan sendiri untuk autentikasi klien.
Rahasia klien, rahasia yang dihasilkan oleh server otorisasi yang seharusnya menjadi nilai unik yang hanya diketahui oleh server otorisasi.
Nota
URL Otorisasi dan URL pertukaran Token saat ini tidak dapat dikonfigurasi per penyewa.
Nota
OAuth v1 tidak didukung karena paparan rahasia klien. OAuth v2 didukung.
Saat menggunakan alur Pemberian Kode OAuth, Anda harus mendukung model di mana setiap pelanggan akan mengirimkan ID klien dan Rahasia Klien mereka sendiri saat menyiapkan instans provisi. Pasangan ID klien lebar aplikasi tunggal/Rahasia Klien tidak didukung.
Cara menyiapkan alur pemberian kode OAuth
Masuk ke pusat admin Microsoft Entra sebagai setidaknya Administrator Aplikasi.
Telusuri ke Provisi Aplikasi>Perusahaan>Aplikasi>Identitas>dan pilih Otorisasi.
Masuk ke pusat admin Microsoft Entra sebagai setidaknya Administrator Aplikasi.
Telusuri aplikasi Identity>Applications>Enterprise.
Pilih aplikasi Anda dan buka Provisi.
Pilih Otorisasi.
Pengguna dialihkan ke URL Otorisasi (halaman masuk untuk aplikasi pihak ketiga).
Admin memberikan kredensial ke aplikasi pihak ketiga.
Aplikasi pihak ketiga mengalihkan pengguna kembali dan menyediakan kode pemberian
Layanan Provisi memanggil URL token dan menyediakan kode pemberian. Aplikasi pihak ketiga merespons dengan token akses, token refresh, dan tanggal kedaluwarsa
Ketika siklus provisi dimulai, layanan memeriksa apakah token akses saat ini valid dan menukarnya dengan token baru jika diperlukan. Token akses disediakan di setiap permintaan yang dibuat ke aplikasi dan validitas permintaan diperiksa sebelum setiap permintaan.
Nota
Meskipun tidak mungkin untuk mengatur OAuth pada aplikasi non-galeri, Anda dapat membuat token akses secara manual dari server otorisasi Anda dan memasukkannya sebagai token rahasia ke aplikasi non-galeri. Ini memungkinkan Anda memverifikasi kompatibilitas server SCIM Anda dengan layanan provisi Microsoft Entra sebelum onboarding ke galeri aplikasi, yang mendukung pemberian kode OAuth.
Token pembawa OAuth berumur panjang: Jika aplikasi Anda tidak mendukung alur pemberian kode otorisasi OAuth, sebagai gantinya menghasilkan token pembawa OAuth berumur panjang yang dapat digunakan administrator untuk menyiapkan integrasi provisi. Token harus abadi, atau pekerjaan provisi dikarantina ketika token kedaluwarsa.
Untuk metode autentikasi dan otorisasi lainnya, beri tahu kami di UserVoice.
Daftar periksa peluncuran galeri go-to-market
Untuk membantu mendorong kesadaran dan permintaan integrasi bersama kami, kami sarankan Anda memperbarui dokumentasi yang ada dan memperkuat integrasi di saluran pemasaran Anda. Kami menyarankan Anda untuk menyelesaikan daftar periksa berikut untuk mendukung peluncuran:
- Pastikan tim penjualan dan dukungan pelanggan Anda sadar, siap, dan dapat berbicara dengan kemampuan integrasi. Singkat tim Anda, berikan faq kepada mereka dan sertakan integrasi ke dalam materi penjualan Anda.
- Buat posting blog atau siaran pers yang menjelaskan integrasi bersama, manfaat, dan cara memulai. Contoh: Imprivata dan Microsoft Entra Press Release
- Manfaatkan media sosial Anda seperti X, Facebook, atau LinkedIn untuk mempromosikan integrasi ke pelanggan Anda. Pastikan untuk menyertakan @Microsoft ID Entra sehingga kami dapat me-retweet posting Anda. Contoh: Imprivata X Post
- Buat atau perbarui halaman/situs web pemasaran Anda (seperti halaman integrasi, halaman mitra, halaman harga, dan sebagainya) untuk menyertakan ketersediaan integrasi bersama. Contoh: Halaman integrasi Pingboard, halaman integrasi Smartsheet, halaman harga Monday.com
- Buat artikel pusat bantuan atau dokumentasi teknis tentang bagaimana pelanggan dapat memulai. Contoh: Integrasi Envoy + Microsoft Entra.
- Beri tahu pelanggan tentang integrasi baru melalui komunikasi pelanggan Anda (buletin bulanan, kampanye email, catatan rilis produk).
Langkah berikutnya
Mengembangkan sampel titikakhir SCIM Mengotomatiskan provisi dan deprovisi pengguna ke aplikasiSaaS Menyesuaikan pemetaan atribut untuk provisi penggunaMenulis ekspresi untuk pemetaanatribut Filter cakupan untuk provisipengguna Pemberitahuanprovisi akun Daftar tutorial tentang cara mengintegrasikan aplikasi SaaS