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 penyediaan. Saat digunakan bersama dengan standar federasi seperti SAML atau OpenID Connect, SCIM memberi administrator solusi berbasis standar yang menyeluruh untuk manajemen akses.

Provisioning from Microsoft Entra ID to an app with SCIM

SCIM 2.0 adalah definisi standar dari dua titik akhir: titik akhir /Users dan titik akhir /Groups. Ia 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 SCIM 2.0 REST API dapat mengurangi atau menghilangkan rasa tidak nyaman bekerja dengan API manajemen pengguna yang eksklusif. Misalnya, klien SCIM yang patuh tahu cara membuat POSTING HTTP objek JSON ke /Users titik akhir untuk membuat entri pengguna baru. Daripada 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 rest API 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 menyediakan pengguna dan grup ke dalam aplikasi Anda.

  1. 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.

  2. Pahami implementasi Microsoft Entra SCIM - Pahami bagaimana layanan provisi Microsoft Entra diterapkan untuk memodelkan penanganan dan respons permintaan protokol SCIM Anda.

  3. 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 menyusun titik akhir Anda. Sampel ini hanya untuk referensi dan pengujian; kami menyarankan untuk tidak menggunakannya sebagai dependensi di aplikasi produksi Anda.

  4. 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.

  5. [Opsional] Terbitkan aplikasi Anda ke galeri aplikasi Microsoft Entra - Memudahkan pelanggan untuk menemukan aplikasi Anda dan dengan mudah mengonfigurasi provisi.

Diagram that shows the required steps for integrating a SCIM endpoint with Microsoft Entra ID.

Desain 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 pekerjaan, dll.) 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, penyedia layanan yang didefinisikan pengidentifikasi
  • userName, 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 mendesain skema Anda, ikuti langkah-langkah berikut:

  1. 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 yang lain diperlukan agar aplikasi berfungsi (misalnya, manajer, tag).

  2. 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.

  3. 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 mencantumkan contoh atribut yang diperlukan:

Atribut/contoh aplikasi yang diperlukan Atribut SCIM yang dipetakan Atribut Microsoft Entra yang Dipetakan
nama log masuk userName userPrincipalName
firstName name.givenName givenName
lastName name.familyName nama belakang
workMail emails[type eq "work"].value Email
manajer manajer manajer
tag urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User:tag extensionAttribute1
status active 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/2819c223-7f76-453a-919d-413861904646"
   }
}   

Catatan

Selain atribut yang diperlukan untuk aplikasi, representasi JSON juga mencakup atribut id, externalId, dan meta yang diperlukan.

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 mencantumkan contoh atribut pengguna:

Pengguna Microsoft Entra urn:ietf:params:scim:schemas:extension:enterprise:2.0:User
IsSoftDeleted active
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 title
mail emails[type eq "work"].value
mailNickname externalId
manajer urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager
mobile phoneNumbers[type eq "mobile"].value
Kode Pos addresses[type eq "work"].postalCode
proxy-Addresses emails[type eq "other"].Value
physical-Delivery-OfficeName addresses[type eq "other"].Formatted
streetAddress addresses[type eq "work"].streetAddress
surname name.familyName
telephone-Number phoneNumbers[type eq "work"].value
user-PrincipalName userName

Tabel berikut mencantumkan contoh atribut grup:

Grup Microsoft Entra urn:ietf:params:scim:schemas:core:2.0:Group
displayName displayName
anggota anggota
objectId externalId

Catatan

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 didefinisikan dalam SCIM RFC. Anda dapat memulai dengan /User titik akhir dan kemudian memperluas dari sana. Tabel berikut mencantumkan beberapa titik akhir SCIM:

Titik akhir Deskripsi
/User Melakukan operasi CRUD pada objek pengguna.
/Group Melakukan operasi CRUD pada objek grup.
/Schemas Kumpulan atribut yang didukung oleh setiap klien dan penyedia layanan dapat bervariasi. Satu penyedia layanan mungkin termasuk name, title, dan emails, sementara penyedia layanan lain menggunakan name, title, dan phoneNumbers. Titik akhir skema memungkinkan penemuan atribut yang didukung.
/Bulk Operasi massal memungkinkan Anda melakukan operasi pada kumpulan objek sumber daya yang besar dalam satu operasi (misalnya, memperbarui keanggotaan untuk grup yang besar).
/ServiceProviderConfig Menyediakan detail tentang fitur standar SCIM yang didukung, misalnya metode autentikasi dan sumber daya yang didukung.
/ResourceTypes Menentukan metadata tentang setiap sumber daya.

Catatan

Gunakan /Schemas titik akhir untuk mendukung atribut kustom atau jika skema Anda sering berubah karena memungkinkan klien untuk mengambil skema terbaru secara otomatis. Gunakan /Bulk 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:

Persyaratan Catatan referensi (protokol SCIM)
Membuat pengguna, dan dengan opsi membuat grup Bagian 3.3
Mengubah pengguna atau grup dengan permintaan PATCH Bagian 3.5.2. Dukungan memastikan bahwa grup dan pengguna disediakan secara berkinerja.
Mengambil sumber daya yang diketahui untuk pengguna atau grup yang dibuat sebelumnya Bagian 3.4.1
Pengguna atau grup kueri 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 memintai sumber daya grup Bagian 3.4.2.2
Mendukung daftar pengguna dan paginating Bagian 3.4.2.4.
Menghapus pengguna dengan lembut active=false dan memulihkan pengguna active=true Objek pengguna harus dikembalikan dalam permintaan apakah pengguna aktif atau tidak. Pengguna tidak boleh ditampilkan hanya saat dihapus secara permanen dari aplikasi.
Mendukung titik akhir /Schemas 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 menampilkan sumber daya harus memastikan setiap sumber daya memiliki properti ini, kecuali ListResponse dengan nol elemen.
  • Nilai yang dikirim harus disimpan dalam format yang sama dengan yang dikirim. Nilai yang tidak valid harus ditolak dengan pesan kesalahan 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/ditampilkan 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 PATCHop, seperti yang didefinisikan dalam bagian 3.5.2. MICROSOFT Entra ID memancarkan op 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 Test Koneksi ion.
  • Dukung HTTPS pada 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 sub-atribut "jenis" dari atribut kompleks multinilai harus unik. Misalnya, tidak boleh ada dua alamat email yang berbeda dengan sub-jenis "kerja".
  • Header untuk semua respons seharusnya berupa content-Type: application/scim+json

Mengambil Sumber Daya:

  • Respons terhadap permintaan kueri/filter harus selalu menjadi 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 hak tidak didukung.
  • Atribut apa pun yang dipertimbangkan 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 kueri userName eq "user@contoso.com" dan email [type eq "work"].value eq "user@contoso.com".

/Grup:

  • 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/tanggapan
  • 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 camel cased (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 yang ditambahkan. Atribut tidak dihapus.

Penyediaan dan pembatalan penyediaan pengguna

Diagram berikut menunjukkan pesan yang dikirim ID Microsoft Entra ke titik akhir SCIM untuk mengelola siklus hidup pengguna di penyimpanan identitas aplikasi Anda.

Diagram that shows the user deprovisioning sequence.

Penyediaan dan pembatalan penyediaan grup

Penyediaan dan pembatalan penyediaan 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 tanggapan atas permintaan tersebut.
  • Permintaan untuk menentukan apakah atribut referensi memiliki nilai tertentu adalah permintaan tentang atribut anggota.

Diagram berikut menunjukkan urutan pembatalan provisi grup:

Diagram that shows the group deprovisioning sequence.

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 mengeluarkan 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.

Operasi Pengguna

Operasi Grup

Penemuan skema

Operasi Pengguna

  • Gunakan userName atau emails[type eq "work"] atribut untuk mengkueri pengguna.

Membuat Pengguna

Permintaan

POSTING /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_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "active": true,
    "emails": [{
        "primary": true,
        "type": "work",
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com"
    }],
    "meta": {
        "resourceType": "User"
    },
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName"
    },
    "roles": []
}
Respons

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_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com",
        "type": "work",
        "primary": true
    }]
}

Dapatkan Pengguna

Permintaan

DAPATKAN /Users/5d48a0a8e9f04aa38008

Respons (Pengguna ditemukan)

HTTP/1.1 200 OKE

{
    "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_feed3ace-693c-4e5a-82e2-694be1b39934",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_22370c1a-9012-42b2-bf64-86099c2a1c22@testuser.com",
        "type": "work",
        "primary": true
    }]
}
Permintaan

DAPATKAN /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

Permintaan

DAPATKAN /Users?filter=userName eq "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081"

Respons

HTTP/1.1 200 OKE

{
    "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_dfeef4c5-5681-4387-b016-bdf221e82081",
        "name": {
            "familyName": "familyName",
            "givenName": "givenName"
        },
        "active": true,
        "emails": [{
            "value": "Test_User_91b67701-697b-46de-b864-bd0bbe4f99c1@testuser.com",
            "type": "work",
            "primary": true
        }]
    }],
    "startIndex": 1,
    "itemsPerPage": 20
}

Dapatkan Pengguna menurut kueri - Hasil nol

Permintaan

DAPATKAN /Users?filter=userName eq "non-existent user"

Respons

HTTP/1.1 200 OKE

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 0,
    "Resources": [],
    "startIndex": 1,
    "itemsPerPage": 20
}

Perbarui Pengguna [Properti multinilai]

Permintaan

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"
            }
    ]
}
Respons

HTTP/1.1 200 OKE

{
    "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_fbb9dda4-fcde-4f98-a68b-6c5599e17c27",
    "name": {
        "formatted": "givenName updatedFamilyName",
        "familyName": "updatedFamilyName",
        "givenName": "givenName"
    },
    "active": true,
    "emails": [{
        "value": "updatedEmail@microsoft.com",
        "type": "work",
        "primary": true
    }]
}

Perbarui Pengguna [Properti bernilai tunggal]

Permintaan

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"
    }]
}
Respons

HTTP/1.1 200 OKE

{
    "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_49dc1090-aada-4657-8434-4995c25a00f7@testuser.com",
        "type": "work",
        "primary": true
    }]
}

Nonaktifkan Pengguna

Permintaan

PATCH /Users/5171a35d82074e068ce2 HTTP/1.1

{
    "Operations": [
        {
            "op": "Replace",
            "path": "active",
            "value": false
        }
    ],
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ]
}
Respons
{
    "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"
    }
}

Menghapus Pengguna

Permintaan

HAPUS /Users/5171a35d82074e068ce2 HTTP/1.1

Respons

HTTP/1.1 204 Tanpa Konten

Operasi Grup

  • Grup dibuat dengan daftar anggota kosong.
  • displayName Gunakan atribut untuk mengkueri grup.
  • Pembaruan untuk grup permintaan PATCH harus menghasilkan HTTP 204 Tanpa Konten dalam respons. Tidak disarankan mengembalikan bodi dengan daftar semua anggota.
  • Tidak perlu mendukung pengembalian semua anggota grup.

Buat Grup

Permintaan

POSTING /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"
    }
}
Respons

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

Permintaan

DAPATKAN /Groups/40734ae655284ad3abcc?excludedAttributes=members HTTP/1.1

Respons

HTTP/1.1 200 OKE

{
    "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

Permintaan

GET /Groups?excludedAttributes=members&filter=displayName eq "displayName" HTTP/1.1

Respons

HTTP/1.1 200 OKE

{
    "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]

Permintaan

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"
    }]
}
Respons

HTTP/1.1 204 Tanpa Konten

Perbarui Grup [Tambahkan Anggota]

Permintaan

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"
        }]
    }]
}
Respons

HTTP/1.1 204 Tanpa Konten

Perbarui Grup [Hapus Anggota]

Permintaan

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"
        }]
    }]
}
Respons

HTTP/1.1 204 Tanpa Konten

Hapus Grup

Permintaan

HAPUS /Groups/cdb1ce18f65944079d37 HTTP/1.1

Respons

HTTP/1.1 204 Tanpa Konten

Penemuan skema

Temukan skema

Permintaan

DAPATKAN /Schemas

Respons

HTTP/1.1 200 OKE

{
    "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.
  • Tombol ECC harus minimal 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, artinya:

Cipher Suites

Semua layanan harus dikonfigurasi untuk menggunakan cipher suite berikut, dalam urutan yang tepat yang ditentukan dalam contoh. Jika Anda hanya memiliki sertifikat RSA, menginstal ECDSA cipher suites tidak akan berpengaruh.

Bar 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 tag ID Microsoft Entra 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 direpresentasikan dalam daftar rentang IP sebagai '40.126.0.0/18'. Anda juga dapat secara terprogram mengambil daftar rentang IP 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, dll.). 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.

Menyusun titik akhir SCIM

Sekarang setelah Anda merancang skema dan memahami implementasi Microsoft Entra SCIM, Anda dapat mulai mengembangkan titik akhir SCIM Anda. Alih-alih memulai dari awal dan membangun implementasi sepenuhnya sendiri, Anda dapat mengandalkan sejumlah pustaka SCIM sumber terbuka yang diterbitkan oleh komunitas SCIM.

Untuk panduan tentang cara membuat titik akhir SCIM termasuk contoh, lihat Mengembangkan contoh 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. Gunakan kumpulan pengujian Postman yang disediakan sebagai bagian dari kode referensi atau jalankan melalui permintaan/respons sampel yang disediakan.

Catatan

Kode referensi dimaksudkan untuk membantu Anda mulai membangun titik akhir SCIM dan diberikan "SEBAGAIMANA ADANYA". Kontribusi dari komunitas dipersilakan untuk membantu membangun dan memelihara kode.

Solusinya 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.

Breakdown: A request translated into calls to the provider's methods

Proyek Microsoft.SCIM.WebHostSample adalah ASP.NET Core Web Application, berdasarkan templat Kosong. Ia memungkinkan kode sampel untuk disebarkan secara mandiri, dihosting dalam kontainer, atau dalam Internet Information Services. Yangi juga mengimplementasikan antarmuka Microsoft.SCIM.IProvider menyimpan kelas dalam memori sebagai toko 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();
    }
    ...

Membuat titik akhir SCIM kustom

Titik akhir SCIM harus memiliki alamat HTTP dan sertifikat autentikasi server yang mana otoritas sertifikasi akarnya adalah salah satu dari nama berikut:

  • CNNIC
  • Comodo
  • CyberTrust
  • DigiCert
  • GeoTrust
  • GlobalSign
  • Go Daddy
  • 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. Dalam lingkungan pengembangan, Anda dapat menggunakan token pengujian dari titik akhir /scim/token. 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. Contohnya, "iss":"https://sts.windows.net/12345678-0000-0000-0000-000000000000/". Dalam contoh ini, alamat dasar nilai klaim, https://sts.windows.net mengidentifikasi ID Microsoft Entra sebagai pengeluar sertifikat, sementara segmen alamat relatif, 12345678-0000-0000-0000-00000000000000, adalah pengidentifikasi unik penyewa Microsoft Entra tempat token dikeluarkan.
    • Audiens untuk token adalah ID Aplikasi untuk aplikasi tersebut di galeri. Aplikasi yang terdaftar dalam satu penyewa menerima klaim iss yang sama 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. Token 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/12345678-0000-0000-0000-000000000000/";
                options.Audience = "8adf8e6e-67b2-4cf2-a259-e3dc5476c621";
                ...
            });
    }
    ...
}

public void Configure(IApplicationBuilder app)
{
    ...
    app.UseAuthentication();
    app.UseAuthorization();
    ...
}

Token pembawa juga diperlukan untuk menggunakan pengujian Postman yang disediakan dan melakukan penelusuran kesalahan lokal menggunakan localhost. Kode sampel menggunakan 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 (DAPATAKAN) 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 penyediaan dan pembatalan penyediaan 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.

Catatan

Ini hanya contoh. Tidak semua pengguna akan memiliki atribut mailNickname, dan nilai yang diberikan pengguna mungkin tidak unik dalam direktori. Selain itu, atribut yang digunakan untuk pencocokan (yang dalam hal externalIdini ) 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 ciri khas dari metode tersebut:

// 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:

  • parameters.AlternateFilters.Count: 1
  • parameters.AlternateFilters.ElementAt(0).AttributePath: "externalId"
  • parameters.AlternateFilters.ElementAt(0).ComparisonOperator: ComparisonOperator.Equals
  • parameters.AlternateFilter.ElementAt(0).ComparisonValue: "jyoung"

Contoh 2. Menyediakan 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 tersebut:

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 ciri khas dari metode tersebut:

// 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. Meminta status pengguna saat ini

ID Microsoft Entra meminta status pengguna yang ditentukan saat ini dari layanan dengan permintaan seperti:

GET ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
Authorization: Bearer ...

Dalam kode sampel, permintaan diterjemahkan ke dalam panggilan ke metode RetrieveAsync penyedia layanan. Berikut adalah ciri khas dari metode tersebut:

// 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: "54D382A4-2050-4C03-94D1-E769F1D15682"
  • SchemaIdentifier: urn:ietf:params:scim:schemas:extension:enterprise:2.0:User

Contoh 4. Meminta 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:

  • parameters.AlternateFilters.Count: 2
  • parameters.AlternateFilters.ElementAt(x).AttributePath: "ID"
  • parameters.AlternateFilters.ElementAt(x).ComparisonOperator: ComparisonOperator.Equals
  • parameters.AlternateFilter.ElementAt(x).ComparisonValue: "54D382A4-2050-4C03-94D1-E769F1D15682"
  • parameters.AlternateFilters.ElementAt(y).AttributePath: "manager"
  • parameters.AlternateFilters.ElementAt(y).ComparisonOperator: ComparisonOperator.Equals
  • parameters.AlternateFilter.ElementAt(y).ComparisonValue: "2819c223-7f76-453a-919d-413861904646"
  • parameters.RequestedAttributePaths.ElementAt(0): "ID"
  • parameters.SchemaIdentifier: urn:ietf:params:scim:schemas:extension:enterprise:2.0:User

Nilai indeks x bisa jadi 0 dan nilai indeks y bisa jadi1. Atau nilai x bisa jadi 1 dan nilai y bisa jadi 0. Hal ini tergantung 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/54D382A4-2050-4C03-94D1-E769F1D15682 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/2819c223-7f76-453a-919d-413861904646",
              "value":"2819c223-7f76-453a-919d-413861904646"}]}]}

Dalam kode sampel, permintaan diterjemahkan ke dalam panggilan ke metode UpdateAsync penyedia layanan. Berikut adalah ciri khas dari metode tersebut:

// 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 Value
ResourceIdentifier.Identifier "54D382A4-2050-4C03-94D1-E769F1D15682"
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/2819c223-7f76-453a-919d-413861904646
(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Value 2819c223-7f76-453a-919d-413861904646

Contoh 6. Membatalkan penyediaan pengguna

Untuk mencabut akses pengguna dari penyimpanan identitas yang dihadapkan oleh titik akhir SCIM, MICROSOFT Entra ID mengirimkan permintaan seperti:

DELETE ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
Authorization: Bearer ...

Dalam kode sampel, permintaan diterjemahkan ke dalam panggilan ke metode DeleteAsync penyedia layanan. Berikut adalah ciri khas dari metode tersebut:

// 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 membatalkan penyediaan pengguna:

  • ResourceIdentifier.Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
  • 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 penyediaan: Awal dan bertahap dalam Cara kerja penyediaan.

Memulai

Tip

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 menghubungkan aplikasi yang mendukung SCIM:

  1. Masuk ke pusat admin Microsoft Entra sebagai setidaknya Administrator Aplikasi.

  2. Telusuri aplikasi Identity>Applications>Enterprise.

  3. Daftar semua aplikasi yang dikonfigurasi ditampilkan, termasuk aplikasi yang ditambahkan dari galeri.

  4. Pilih + Aplikasi baru>+ Buat aplikasi Anda.

  5. 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:

    Screenshot shows the Microsoft Entra application gallery.

  6. Di layar manajemen aplikasi, pilih Penyediaan di panel kiri.

  7. Di menu Mode Penyediaan, pilih Otomatis.

    Cuplikan layar berikut menunjukkan konfigurasi pengaturan provisi di pusat admin Microsoft Entra:

    Screenshot of app provisioning page in the Microsoft Entra admin center.

  8. Di bidang URL Penyewa, masukkan URL titik akhir SCIM aplikasi. Contoh: https://api.contoso.com/scim/

  9. 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.

    Catatan

    Tidak disarankan untuk membiarkan bidang ini kosong dan mengandalkan token yang dihasilkan oleh ID Microsoft Entra. Opsi ini terutama tersedia untuk tujuan pengujian.

  10. Pilih Uji Koneksi ion agar Microsoft Entra ID mencoba menyambungkan ke titik akhir SCIM. Jika upaya gagal, informasi kesalahan akan ditampilkan.

    Catatan

    Uji Koneksi ion mengkueri 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 OKE dengan pesan SCIM ListResponse kosong.

  11. Jika upaya untuk terhubung ke aplikasi berhasil, pilih Simpan untuk menyimpan mandat admin.

  12. 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 yang Cocok digunakan untuk mencocokkan pengguna dan grup di aplikasi Anda untuk operasi pembaruan. Pilih Simpan untuk menerapkan perubahan apa pun.

    Catatan

    Anda dapat secara opsional menonaktifkan sinkronisasi objek grup dengan menonaktifkan pemetaan "grup".

  13. Di bawah Pengaturan, bidang Lingkup menentukan pengguna dan grup mana yang disinkronkan. Pilih Sinkronkan hanya pengguna dan grup yang ditetapkan (disarankan) hanya menyinkronkan pengguna dan grup yang ditetapkan di tab Pengguna dan grup.

  14. Setelah konfigurasi Anda selesai, atur Status Penyediaan ke Aktif.

  15. Pilih Simpan untuk memulai layanan provisi Microsoft Entra.

  16. Jika hanya menyinkronkan pengguna dan grup yang ditetapkan (disarankan), pilih tab Pengguna dan grup dan tetapkan pengguna atau grup yang ingin Anda sinkronkan.

Setelah siklus awal dimulai, Anda dapat memilih Penyediaan log di panel kiri untuk memantau kemajuan, yang menampilkan semua tindakan yang dilakukan oleh layanan penyediaan di aplikasi Anda. Untuk informasi selengkapnya tentang cara membaca log provisi Microsoft Entra, lihat Melaporkan provisi akun pengguna otomatis.

Catatan

Siklus awal membutuhkan waktu lebih lama untuk dilakukan daripada sinkronisasi nanti, yang terjadi sekitar setiap 40 menit selama layanan berjalan.

Jika Anda membangun aplikasi yang digunakan oleh lebih dari satu penyewa, jadikan aplikasi tersebut tersedia di galeri aplikasi Microsoft Entra. Langkah ini akan memudahkan organisasi untuk menemukan aplikasi dan mengonfigurasi provisi. Memublikasikan aplikasi Anda di galeri Microsoft Entra dan menyediakan provisi untuk orang lain itu mudah. Simak 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.

Menggunakan daftar periksa untuk onboard 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 (Wajib)
  • Membuat kontak rekayasa dan dukungan untuk memandu pelanggan memposting galeri onboarding (Wajib)
  • 3 mandat pengujian yang tidak kedaluwarsa untuk aplikasi Anda (Wajib)
  • 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
  • Membuat rekayasa dan titik dukungan kontak untuk mendukung pelanggan memposting onboarding galeri (Wajib)
  • Mendukung penemuan skema (wajib)
  • Mendukung pembaruan beberapa keanggotaan grup dengan satu PATCH
  • Mendokumentasikan titik akhir SCIM Anda secara publik

Spesifikasi SCIM tidak mendefinisikan skema khusus SCIM untuk otentikasi dan otorisasi dan bergantung pada penggunaan standar industri yang ada.

Metode otorisasi Pro Kontra Dukungan
Nama pengguna dan kata sandi (tidak direkomendasikan atau didukung oleh ID Microsoft Entra) Mudah diimplementasikan Insecure - Kata sandi Anda tidak bermasalah Tidak didukung untuk aplikasi galeri baru atau non-galeri.
Token pembawa berumur panjang Token berumur panjang tidak mengharuskan pengguna untuk hadir. Mereka mudah digunakan oleh admin saat menyiapkan provisi. Token berumur panjang mungkin sulit untuk 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 hadir 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 hibah kode OAuth pada non-galeri ada di backlog kami, selain dukungan untuk URL auth/token yang dapat dikonfigurasi di aplikasi galeri.
Hibah mandat 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. Baik hibah kode otorisasi dan mandat klien membuat jenis token akses yang sama, sehingga bergerak di antara metode ini transparan ke API. Provisi dapat sepenuhnya otomatis 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.

Catatan

Tidak disarankan untuk membiarkan bidang token kosong di antarmuka pengguna aplikasi kustom konfigurasi provisi Microsoft Entra. Token yang dihasilkan terutama tersedia untuk tujuan pengujian.

Aliran hibah kode OAuth

Layanan penyediaan mendukung pemberian kode otorisasi dan setelah mengirimkan permintaan Anda untuk memublikasikan 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 bertukar hibah otorisasi untuk token akses, biasanya dengan autentikasi klien.

  • ID Klien,server otorisasi mengeluarkan pengidentifikasi klien terdaftar, yang merupakan string unik yang mewakili informasi pendaftaran yang disediakan oleh klien. Pengidentifikasi klien bukanlah rahasia; ia 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.

Catatan

URL Otorisasi dan URL pertukaran Token saat ini tidak dapat dikonfigurasi per penyewa.

Catatan

OAuth v1 tidak didukung karena paparan rahasia klien. OAuth v2 didukung.

Disarankan, tetapi tidak diperlukan, bahwa Anda mendukung beberapa rahasia untuk perpanjangan yang mudah tanpa waktu henti.

Cara mengatur alur pemberian kode OAuth

  1. Masuk ke pusat admin Microsoft Entra sebagai setidaknya Administrator Aplikasi.

  2. Telusuri ke Provisi Aplikasi>Perusahaan>Aplikasi>Identitas>dan pilih Otorisasi.

  3. Masuk ke pusat admin Microsoft Entra sebagai setidaknya Administrator Aplikasi.

  4. Telusuri aplikasi Identity>Applications>Enterprise.

  5. Pilih aplikasi Anda dan buka Provisi.

  6. Pilih Otorisasi.

    1. Pengguna dialihkan ke URL Otorisasi (halaman masuk untuk aplikasi pihak ketiga).

    2. Admin memberikan mandat ke aplikasi pihak ketiga.

    3. Aplikasi pihak ketiga mengalihkan pengguna kembali dan menyediakan kode pemberian

    4. Layanan Provisi memanggil URL token dan menyediakan kode pemberian. Aplikasi pihak ketiga merespons dengan token akses, token refresh, dan tanggal kedaluwarsa

  7. Ketika siklus penyediaan dimulai, layanan memeriksa apakah token akses saat ini valid dan menukarnya dengan token baru jika diperlukan. Token akses disediakan dalam setiap permintaan yang dibuat ke aplikasi dan validitas permintaan diperiksa sebelum setiap permintaan.

Catatan

Meskipun tidak mungkin untuk mengatur OAuth pada aplikasi non-galeri, Anda dapat secara manual membuat token akses 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, sebaliknya buat 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 lebih lanjut, beri tahu kami di UserVoice.

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. Beri arahan singkat pada tim Anda, termasuk FAQ dan sertakan integrasi ke dalam materi penjualan Anda.
  • Buat posting blog atau siaran pers yang menjelaskan integrasi bersama, manfaatnya, dan cara memulai. Contoh: Imprivata dan Microsoft Entra Press Release
  • Manfaatkan media sosial Anda seperti Twitter, Facebook, atau LinkedIn untuk mempromosikan integrasi kepada pelanggan Anda. Pastikan untuk menyertakan @Microsoft ID Entra sehingga kami dapat me-retweet posting Anda. Contoh: Posting Imprivata Twitter
  • Buat atau perbarui halaman/situs web pemasaran Anda (misalnya halaman integrasi, halaman mitra, halaman harga, dll.) 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 bisa 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