Bagikan melalui


Mengotorisasi permintaan ke sumber daya Azure SignalR Service dengan aplikasi Microsoft Entra

Azure SignalR Service mendukung ID Microsoft Entra untuk mengotorisasi permintaan dengan aplikasi Microsoft Entra.

Artikel ini menjelaskan cara menyiapkan sumber daya dan kode Anda untuk mengautentikasi permintaan ke sumber daya menggunakan aplikasi Microsoft Entra.

Mendaftarkan aplikasi di ID Microsoft Entra

Langkah pertama adalah Mendaftarkan aplikasi di MICROSOFT Entra ID:

Setelah mendaftarkan aplikasi, Anda dapat menemukan nilai ID Aplikasi (klien) dan ID Direktori (penyewa) di halaman gambaran umum aplikasi. GUID ini dapat berguna dalam langkah-langkah berikut.

Cuplikan layar informasi gambaran umum untuk aplikasi terdaftar.

Tambahkan kredensial

Setelah mendaftarkan aplikasi, Anda dapat menambahkan sertifikat, rahasia klien (string), atau kredensial identitas federasi sebagai kredensial ke pendaftaran aplikasi klien rahasia Anda. Kredensial memungkinkan aplikasi Anda mengautentikasi sebagai dirinya sendiri, tidak memerlukan interaksi dari pengguna saat runtime, dan digunakan oleh aplikasi klien rahasia yang mengakses API web.

Menambahkan penetapan peran di portal Azure

Langkah-langkah berikut menjelaskan cara menetapkan peran SignalR App Server ke perwakilan layanan atau identitas terkelola untuk sumber daya Azure SignalR Service. Untuk langkah yang lebih detail, lihat Menetapkan peran Azure dengan menggunakan portal Azure.

Catatan

Anda dapat menetapkan peran ke cakupan apa pun, termasuk grup manajemen, langganan, grup sumber daya, atau sumber daya tunggal. Untuk mempelajari selengkapnya tentang cakupan, lihat Memahami cakupan untuk Azure RBAC.

  1. Di portal Azure, buka sumber daya Azure SignalR Service Anda.

  2. Di panel kiri, pilih Kontrol akses (IAM).

  3. Pilih Tambahkan>Tambahkan penetapan peran.

    Cuplikan layar yang memperlihatkan halaman untuk kontrol akses dan pilihan untuk menambahkan penetapan peran.

  4. Pada tab Peran , pilih SignalR App Server. Peran bawaan Azure SignalR Service lainnya bergantung pada skenario Anda.

    Peranan Deskripsi Studi kasus
    Server Aplikasi SignalR Akses ke API yang membuat koneksi server dan menghasilkan kunci. Paling umum digunakan untuk server aplikasi dengan sumber daya Azure SignalR yang berjalan dalam mode Default.
    Pemilik Layanan SignalR Akses penuh ke semua API data-plane, termasuk REST API, API yang membuat koneksi server, dan API yang menghasilkan kunci/token. Digunakan untuk server negosiasi dengan sumber daya Azure SignalR Service yang berjalan dalam mode Tanpa Server. Ini memerlukan izin REST API dan izin API autentikasi.
    Pemilik REST API SignalR Akses penuh ke API REST lapisan data. Digunakan untuk Azure SignalR Management SDK untuk mengelola koneksi dan grup, tetapi tidak membuat koneksi server atau menangani permintaan negosiasi.
    Pembaca API REST SignalR Akses hanya-baca ke API REST lapisan data. Digunakan ketika Anda menulis sebuah alat pemantauan sistem yang memanggil API REST baca-saja.
  5. Pilih Selanjutnya.

  6. Untuk aplikasi Microsoft Entra:

    1. Pada baris Tetapkan akses ke, pilih Pengguna, grup, atau perwakilan layanan.
    2. Di baris Anggota , pilih anggota, lalu pilih identitas di jendela pop-up.
  7. Untuk identitas terkelola untuk sumber daya Azure:

    1. Di baris Tetapkan akses ke , pilih Identitas terkelola.
    2. Di baris Anggota , pilih anggota, lalu pilih aplikasi di jendela pop-up.
  8. Pilih Selanjutnya.

  9. Tinjau tugas Anda, lalu pilih Tinjau + tetapkan untuk mengonfirmasi penetapan peran.

Penting

Pengaturan peran yang baru ditambahkan mungkin membutuhkan waktu hingga 30 menit untuk diproses.

Untuk mempelajari selengkapnya tentang cara menetapkan dan mengelola peran Azure, lihat:

Mengonfigurasi SDK server aplikasi Microsoft.Azure.SignalR untuk C#

Server SDK Azure SignalR untuk C#

SDK server Azure SignalR memanfaatkan pustaka Azure.Identity untuk menghasilkan token untuk menyambungkan ke sumber daya. Klik untuk menjelajahi penggunaan terperinci.

Catatan

TenantId harus cocok dengan tenantId penyewa tempat sumber daya SignalR Anda berada.

Menggunakan aplikasi Microsoft Entra dengan sertifikat

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential = new ClientCertificateCredential("tenantId", "clientId", "path-to-cert");

    option.Endpoints = [
      new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
    ];
});

Menggunakan aplikasi Microsoft Entra dengan rahasia klien

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential = new ClientSecretCredential("tenantId", "clientId", "clientSecret");

    option.Endpoints = [
      new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
    ];
});

Gunakan aplikasi Microsoft Entra dengan identitas terfederasi

Dalam kasus organisasi Anda menonaktifkan penggunaan rahasia/sertifikat klien, Anda dapat mengonfigurasi aplikasi untuk mempercayai identitas terkelola untuk autentikasi.

Untuk mempelajari selengkapnya tentang hal itu, lihat Mengonfigurasi aplikasi untuk mempercayai identitas terkelola (pratinjau).

Catatan

Mengonfigurasi aplikasi untuk mempercayai identitas terkelola adalah fitur pratinjau.

services.AddSignalR().AddAzureSignalR(option =>
{
    var msiCredential = new ManagedIdentityCredential("msiClientId");

    var credential = new ClientAssertionCredential("tenantId", "appClientId", async (ctoken) =>
    {
        // Entra ID US Government: api://AzureADTokenExchangeUSGov
        // Entra ID China operated by 21Vianet: api://AzureADTokenExchangeChina
        var request = new TokenRequestContext([$"api://AzureADTokenExchange/.default"]);
        var response = await msiCredential.GetTokenAsync(request, ctoken).ConfigureAwait(false);
        return response.Token;
    });

    option.Endpoints = [
        new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
    ];
});

Kredensial ini akan menggunakan identitas terkelola yang diberikan oleh pengguna untuk menghasilkan clientAssertion dan menggunakannya untuk mendapatkan clientToken sebagai bagian dari proses autentikasi.

appClientId dan tenantId harus merupakan aplikasi perusahaan yang Anda atur di penyewa sumber daya SignalR.

Menggunakan beberapa titik akhir

Kredensial bisa berbeda untuk titik akhir yang berbeda.

Dalam sampel ini, Azure SignalR SDK terhubung ke resource1 dengan rahasia klien dan ke resource2 dengan sertifikat.

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential1 = new ClientSecretCredential("tenantId", "clientId", "clientSecret");
    var credential2 = new ClientCertificateCredential("tenantId", "clientId", "path-to-cert");

    option.Endpoints = new ServiceEndpoint[]
    {
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), credential1),
        new ServiceEndpoint(new Uri("https://<resource2>.service.signalr.net"), credential2),
    };
});

Sampel lainnya dapat ditemukan di tautan Sampel ini

Pengikatan Azure SignalR Service di Azure Functions

Pengikatan Azure SignalR Service di Azure Functions menggunakan pengaturan aplikasi di portal atau local.settings.json secara lokal untuk mengonfigurasi identitas aplikasi Microsoft Entra untuk mengakses sumber daya Azure SignalR Service Anda.

Pertama, Anda perlu menentukan URI layanan Azure SignalR Service. Kunci URI layanan adalah serviceUri. Ini dimulai dengan awalan nama koneksi (yang default ke AzureSignalRConnectionString) dan pemisah. Pemisah adalah garis bawah (__) di portal Azure dan titik dua (:) dalam file local.settings.json. Anda dapat menyesuaikan nama koneksi dengan menggunakan properti ConnectionStringSettingpengikatan . Lanjutkan membaca untuk menemukan sampel.

Kemudian, Anda memilih apakah akan mengonfigurasi identitas aplikasi Microsoft Entra Anda dalam variabel lingkungan yang telah ditentukan sebelumnya atau dalam variabel yang ditentukan SignalR.

Mengonfigurasi identitas dalam variabel lingkungan yang telah ditentukan sebelumnya

Lihat Variabel lingkungan untuk daftar variabel lingkungan yang telah ditentukan sebelumnya. Saat Anda memiliki beberapa layanan, kami sarankan Anda menggunakan identitas aplikasi yang sama, sehingga Anda tidak perlu mengonfigurasi identitas untuk setiap layanan. Layanan lain mungkin juga menggunakan variabel lingkungan ini, berdasarkan pengaturan layanan tersebut.

Misalnya, untuk menggunakan kredensial rahasia klien, konfigurasikan identitas sebagai berikut dalam file local.settings.json :

{
  "Values": {
    "<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net",
    "AZURE_CLIENT_ID": "...",
    "AZURE_CLIENT_SECRET": "...",
    "AZURE_TENANT_ID": "..."
  }
}

Di portal Azure, tambahkan pengaturan sebagai berikut:

 <CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
AZURE_CLIENT_ID = ...
AZURE_TENANT_ID = ...
AZURE_CLIENT_SECRET = ...

Mengonfigurasi identitas dalam variabel yang ditentukan oleh SignalR

Variabel yang ditentukan oleh SignalR memiliki prefiks kunci yang sama dengan kunci serviceUri. Berikut adalah daftar variabel yang mungkin Anda gunakan:

  • clientId
  • clientSecret
  • tenantId

Berikut adalah sampel untuk menggunakan kredensial rahasia klien dalam file local.settings.json :

{
  "Values": {
    "<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net",
    "<CONNECTION_NAME_PREFIX>:clientId": "...",
    "<CONNECTION_NAME_PREFIX>:clientSecret": "...",
    "<CONNECTION_NAME_PREFIX>:tenantId": "..."
  }
}

Di portal Azure, tambahkan pengaturan sebagai berikut:

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__clientId = ...
<CONNECTION_NAME_PREFIX>__clientSecret = ...
<CONNECTION_NAME_PREFIX>__tenantId = ...

Langkah berikutnya

Lihat artikel terkait berikut ini: