Bagikan melalui


Mengautentikasi dengan broker MQTT dengan menggunakan autentikasi webhook kustom

Artikel ini memperlihatkan kepada Anda cara mengautentikasi dengan namespace Azure Event Grid dengan menggunakan webhook atau fungsi Azure.

Autentikasi webhook memungkinkan titik akhir HTTP eksternal (webhook atau fungsi) untuk mengautentikasi koneksi Message Queuing Telemetry Transport (MQTT) secara dinamis. Metode ini menggunakan validasi Microsoft Entra ID JSON Web Token untuk memastikan akses yang aman.

Ketika klien mencoba untuk terhubung, broker memanggil titik akhir HTTP yang ditentukan pengguna yang memvalidasi kredensial, seperti token Tanda Tangan Akses Bersama, nama pengguna, dan kata sandi, atau bahkan melakukan pemeriksaan Daftar Pencabutan Sertifikat. Webhook mengevaluasi permintaan dan mengembalikan keputusan untuk mengizinkan atau menolak koneksi, bersama dengan metadata opsional untuk otorisasi halus. Pendekatan ini mendukung kebijakan autentikasi yang fleksibel dan terpusat di berbagai armada perangkat dan kasus penggunaan.

Prasyarat

  • Namespace Layanan Event Grid dengan identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna.
  • Webhook eksternal atau fungsi Azure.
  • Akses yang diberikan ke identitas terkelola namespace Event Grid ke fungsi Azure atau webhook.

Langkah-langkah tingkat tinggi

Untuk menggunakan autentikasi webhook kustom untuk namespace, ikuti langkah-langkah berikut:

  1. Buat namespace dan konfigurasikan subresourcenya.
  2. Aktifkan identitas terkelola di namespace Layanan Event Grid Anda.
  3. Berikan akses identitas terkelola ke fungsi atau webhook Azure Anda.
  4. Konfigurasikan pengaturan webhook kustom di namespace Layanan Event Grid Anda.
  5. Sambungkan klien Anda ke namespace Layanan Event Grid dan dapatkan autentikasi melalui webhook atau fungsi.

Membuat namespace dan mengonfigurasi subsumber dayanya

Untuk membuat namespace layanan dan mengonfigurasi sub-sumber dayanya, ikuti instruksi di Mulai Cepat: Menerbitkan dan berlangganan pesan MQTT pada namespace Layanan Event Grid dengan portal Microsoft Azure. Lewati langkah-langkah untuk membuat sertifikat dan klien karena identitas klien berasal dari token yang disediakan. Atribut klien didasarkan pada klaim kustom dalam token klien. Atribut klien digunakan dalam kueri grup klien, variabel templat topik, dan konfigurasi pengayaan perutean.

Mengaktifkan identitas terkelola di namespace Layanan Event Grid Anda

Untuk mengaktifkan identitas terkelola yang ditetapkan sistem di namespace Layanan Event Grid Anda, gunakan perintah berikut:

az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}" 

Untuk informasi tentang cara mengonfigurasi identitas yang ditetapkan sistem dan pengguna dengan menggunakan portal Microsoft Azure, lihat Mengaktifkan identitas terkelola untuk namespace Layanan Event Grid.

Memberikan identitas terkelola akses yang sesuai ke fungsi atau webhook

Berikan akses yang tepat kepada identitas terkelola dari namespace Event Grid Anda ke fungsi atau webhook Azure yang dituju.

Untuk menyiapkan autentikasi kustom untuk fungsi Azure, ikuti langkah-langkah berikutnya.

Membuat aplikasi Microsoft Entra

  1. Buat aplikasi Microsoft Entra di ID Microsoft Entra.

  2. Pada halaman Gambaran Umum aplikasi, catat nilai ID Aplikasi (klien).

    Cuplikan layar yang memperlihatkan halaman Gambaran Umum aplikasi ID Microsoft Entra dengan ID aplikasi (klien) disorot.

  3. Di menu sebelah kiri, pilih Ekspos API. Di samping URI ID Aplikasi, pilih Tambahkan.

  4. Catat nilai URI ID Aplikasi pada panel Edit URI ID aplikasi , lalu pilih Simpan.

    Cuplikan layar yang memperlihatkan URI ID aplikasi aplikasi Microsoft Entra.

Menyiapkan autentikasi untuk fungsi Azure

Jika Anda memiliki fungsi Azure dasar yang dibuat dari portal Microsoft Azure, siapkan autentikasi dan validasi token ID Microsoft Entra yang dibuat dengan menggunakan identitas terkelola.

  1. Buka aplikasi Azure Functions Anda.

  2. Di menu sebelah kiri, pilih Autentikasi, lalu pilih Tambahkan IdP.

    Cuplikan layar yang memperlihatkan halaman Autentikasi.

  3. Pada halaman Tambahkan IdP , untuk Penyedia Identitas, pilih Microsoft dari daftar dropdown.

  4. Di bagian Pendaftaran aplikasi , tentukan nilai untuk properti berikut:

    1. ID Aplikasi (klien): Masukkan ID klien aplikasi Microsoft Entra yang Anda catat sebelumnya.

    2. URL Penerbit: Tambahkan URL penerbit dalam formulir https://login.microsoftonline.com/<tenantid>/v2.0.

      Cuplikan layar yang memperlihatkan Tambahkan penyedia identitas dengan Microsoft sebagai penyedia identitas.

  5. Untuk Audiens token yang diizinkan, tambahkan nilai URI ID Aplikasi dari aplikasi Microsoft Entra yang Anda catat sebelumnya.

  6. Di bagian Pemeriksaan tambahan , untuk pengembangan aplikasi Klien, pilih Izinkan permintaan dari aplikasi klien tertentu.

  7. Pada panel Aplikasi klien yang diizinkan , masukkan ID klien identitas terkelola yang ditetapkan sistem yang digunakan untuk menghasilkan token. Anda dapat menemukan ID ini di aplikasi perusahaan sumber daya ID Microsoft Entra.

  8. Pilih pengaturan lain berdasarkan persyaratan spesifik Anda, lalu pilih Tambahkan.

Sekarang, buat dan gunakan token ID Microsoft Entra.

  1. Hasilkan token ID Microsoft Entra dengan menggunakan identitas terkelola dengan URI ID aplikasi sebagai sumber daya.
  2. Gunakan token ini untuk memanggil fungsi Azure dengan menyertakannya di header permintaan.

Mengonfigurasi pengaturan autentikasi webhook kustom di namespace Layanan Event Grid Anda

Konfigurasikan pengaturan autentikasi webhook kustom di namespace Layanan Event Grid Anda dengan menggunakan portal Microsoft Azure dan Azure CLI. Anda membuat namespace terlebih dahulu lalu memperbaruinya.

Menggunakan portal Azure

  1. Buka namespace Layanan Event Grid Anda di portal Microsoft Azure.

  2. Pada halaman Namespace Event Grid, pilih Konfigurasi di menu sebelah kiri.

  3. Di bagian Autentikasi Webhook Kustom , tentukan nilai untuk properti berikut ini:

    1. Jenis identitas terkelola: Pilih Pengguna yang ditetapkan.
    2. URL Webhook: Masukkan nilai titik akhir URL tempat layanan Event Grid mengirim permintaan webhook yang diautentikasi dengan menggunakan identitas terkelola yang ditentukan.
    3. URI audiens token: Masukkan nilai ID aplikasi Microsoft Entra atau URI untuk mendapatkan token akses yang akan disertakan sebagai token pembawa dalam permintaan pengiriman.
    4. ID penyewa ID Microsoft Entra: Masukkan nilai ID penyewa Microsoft Entra yang digunakan untuk memperoleh token pembawa untuk pengiriman webhook yang diautentikasi.
  4. Pilih Terapkan.

    Cuplikan layar yang memperlihatkan konfigurasi autentikasi webhook untuk namespace Layanan Event Grid.

Gunakan Azure CLI

Untuk memperbarui namespace Anda dengan konfigurasi autentikasi webhook kustom, gunakan perintah berikut:

az eventgrid namespace update \ 
    --resource-group <resource-group-name> \ 
    --name <namespace-name> \ 
    --api-version 2025-04-01-preview \ 
    --identity-type UserAssigned \ 
    --identity-user-assigned-identities "/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX={}" \ 
    --set properties.isZoneRedundant=true \ 
        properties.topicSpacesConfiguration.state=Enabled \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.type=UserAssigned \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.userAssignedIdentity="/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX" \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.endpointUrl="https://XXXXXXXXXXX" \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryApplicationIdOrUri="api://XXXXXXXXXXX/.default" \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryTenantId="XXXXXXXXXXX" 

Ganti <NAMESPACE_NAME> dan <RESOURCE_GROUP_NAME> dengan nilai aktual Anda. Isi tempat penampung di langganan, grup sumber daya, identitas, ID aplikasi, URL, dan ID penyewa. Untuk meningkatkan performa dan keandalan autentikasi berbasis webhook untuk broker Event Grid MQTT, kami sangat menyarankan Agar Anda mengaktifkan dukungan HTTP/2 untuk titik akhir webhook Anda.

Detail-detail Webhook API

Tajuk permintaan

Otorisasi: Token pembawa

Token adalah token Microsoft Entra untuk identitas terkelola yang dikonfigurasi untuk memanggil webhook.

Permintaan muatan

{
    "clientId": "<string>",
    "userName": "<string>",
    "password": "<base64 encoded bytes>",
    "authenticationMethod": "<string>",
    "authenticationData": "<base64 encoded bytes>",
    "clientCertificate": "<certificate in PEM format>",
    "clientCertificateChain": "<certificates from chain in PEM format>"
}

Deskripsi kolom payload

Bidang Diperlukan/Opsional Deskripsi
clientId Diperlukan ID klien dari paket MQTT CONNECT.
userName Fakultatif Nama pengguna dari paket MQTT CONNECT.
password Fakultatif Kata sandi dari paket MQTT CONNECT dalam pengodean Base64.
authenticationMethod Fakultatif Metode autentikasi dari paket MQTT CONNECT (hanya MQTT5).
authenticationData Fakultatif Data autentikasi dari paket MQTT CONNECT dalam pengodean Base64 (hanya MQTT5).
clientCertificate Fakultatif Sertifikat klien dalam format PEM.
clientCertificateChain Fakultatif Sertifikat lain yang disediakan oleh klien yang diperlukan untuk membangun rantai dari sertifikat klien ke sertifikat Otoritas Sertifikat.
userProperties Fakultatif Properti pengguna dari paket CONNECT (hanya MQTT5).

Isi Muatan Respons

Respons berhasil

HTTP/1.1 200 OK 
Content-Type: application/json 

{ 
    "decision": "allow", 
    "clientAuthenticationName": "<string>", 
    "attributes": { 
        "attr": "<int/string/array_of_strings>", 
        ... 
    }, 
    "expiration": "<unix time format>" 
} 

Respons ditolak

HTTP/1.1 400 Bad Request 
Content-Type: application/json 

{ 
    "decision": "deny", 
    "errorReason": "<string>" 
}

Deskripsi bidang respons

Bidang Deskripsi
decision (diperlukan) Keputusan autentikasi adalah allow atau deny.
clientAuthenticationName Nama autentikasi klien (nama identitas). (Diperlukan saat decision diatur ke allow.)
attributes Kamus dengan atribut. Kunci adalah nama atribut, dan nilainya adalah int/string/array. (Opsional ketika decision diatur ke allow.)
expiration Tanggal kedaluwarsa dalam format waktu Unix. (Opsional ketika decision diatur ke allow.)
errorReason Pesan kesalahan jika decision diatur ke deny. Kesalahan ini dicatat. (Opsional ketika decision diatur ke deny.)

Contoh jenis atribut yang didukung

"num_attr_pos": 1, 
"num_attr_neg": -1, 
"str_attr": "str_value", 
"str_list_attr": [ 
    "str_value_1", 
    "str_value_2" 
] 

Semua jenis data yang benar (angka yang pas <int32/string/array_of_strings>) digunakan sebagai atribut. Dalam contoh, num_attr_posklaim , num_attr_neg, str_attr, dan str_list_attr memiliki jenis data yang benar dan digunakan sebagai atribut.