Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam tutorial langkah demi langkah ini, Anda membangun ruang obrolan dengan autentikasi dan olahpesan privat dengan menggunakan teknologi ini:
- Azure Functions: API back-end untuk mengautentikasi pengguna dan mengirim pesan obrolan.
- Azure SignalR Service: Layanan untuk menyiarkan pesan baru ke klien obrolan yang terhubung.
- Azure Storage: Layanan penyimpanan yang diperlukan Azure Functions.
- Azure App Service: Layanan yang menyediakan autentikasi pengguna.
Penting
String koneksi mentah muncul dalam artikel ini hanya untuk tujuan demonstrasi.
string koneksi menyertakan informasi otorisasi yang diperlukan aplikasi Anda untuk mengakses Azure SignalR Service. Kunci akses di dalam string koneksi mirip dengan kata sandi root untuk layanan Anda. Di lingkungan produksi, selalu lindungi kunci akses Anda. Gunakan Azure Key Vault untuk mengelola dan memutar kunci Anda dengan aman dan mengamankan string koneksi Anda menggunakan ID Microsoft Entra dan mengotorisasi akses dengan ID Microsoft Entra.
Hindari mendistribusikan kunci akses ke pengguna lain, melakukan hard-coding, atau menyimpannya di mana saja dalam teks biasa yang dapat diakses orang lain. Putar kunci Anda jika Anda yakin bahwa kunci tersebut mungkin telah disusupi.
Prasyarat
- Akun Azure dengan langganan aktif. Jika Anda tidak memilikinya, Anda dapat membuatnya secara gratis.
- Node.js (versi 20.x).
- Azure Functions Core Tools (versi 4).
Mengalami masalah? Beri tahu kami.
Membuat sumber daya penting di Azure
Membuat sumber daya Azure SignalR Service
Aplikasi Anda akan mengakses instans Azure SignalR Service. Gunakan langkah-langkah berikut untuk membuat instans Azure SignalR Service dengan menggunakan portal Azure:
Di portal Azure, pilih tombol Buat sumber daya (+).
Cari dan pilih SignalR Service.
Pilih Buat.
Masukkan informasi berikut.
Nama Nilai Grup sumber daya Buat grup sumber daya baru dengan nama unik. Nama sumber daya Masukkan nama unik untuk instans Azure SignalR Service. Wilayah Pilih wilayah yang dekat dengan Anda. Tingkatan harga Pilih Gratis. Mode layanan Pilih Tanpa Server. Pilih Tinjau + Buat.
Pilih Buat.
Mengalami masalah? Beri tahu kami.
Membuat aplikasi fungsi Azure dan akun penyimpanan Azure
Dari beranda di portal Azure, pilih Buat sumber daya (+).
Cari Aplikasi Fungsi dan pilih.
Pilih Buat.
Masukkan informasi berikut.
Nama Nilai Grup sumber daya Gunakan grup sumber daya yang sama dengan instans Azure SignalR Service Anda. Nama Aplikasi Fungsi Masukkan nama unik untuk aplikasi fungsi. Tumpukan runtime Pilih Node.js. Wilayah Pilih wilayah yang dekat dengan Anda. Secara default, akun penyimpanan Azure baru dibuat dalam grup sumber daya yang sama bersama dengan aplikasi fungsi Anda. Jika Anda ingin menggunakan akun penyimpanan lain di aplikasi fungsi, beralihlah ke tab Hosting untuk memilih akun.
Pilih Tinjauan + Buat, kemudian pilih Buat.
Membuat proyek Azure Functions secara lokal
Menginisialisasi aplikasi fungsi
Dari baris perintah, buat folder akar untuk proyek Anda dan ubah ke folder .
Jalankan perintah berikut di terminal Anda untuk membuat proyek JavaScript Functions baru:
Secara default, proyek yang dihasilkan menyertakan file host.json yang berisi bundel ekstensi yang menyertakan ekstensi SignalR. Untuk informasi selengkapnya, lihat Bundel ekstensi Azure Functions.
Mengonfigurasi pengaturan aplikasi
Saat Anda menjalankan dan men-debug runtime Azure Functions secara lokal, aplikasi fungsi membaca pengaturan aplikasi dari local.settings.json. Perbarui file ini dengan string koneksi instans Azure SignalR Service dan akun penyimpanan yang Anda buat sebelumnya.
String koneksi mentah muncul dalam artikel ini hanya untuk tujuan demonstrasi. Di lingkungan produksi, selalu lindungi kunci akses Anda. Gunakan Azure Key Vault untuk mengelola dan memutar kunci Anda dengan aman dan mengamankan string koneksi Anda menggunakan ID Microsoft Entra dan mengotorisasi akses dengan ID Microsoft Entra.
Ganti konten local.settings.json dengan kode berikut:
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "node",
"AzureWebJobsStorage": "<your-storage-account-connection-string>",
"AzureSignalRConnectionString": "<your-Azure-SignalR-connection-string>"
}
}
Dalam kode sebelumnya:
Masukkan string koneksi Azure SignalR Service ke
AzureSignalRConnectionStringdalam pengaturan.Untuk mendapatkan string, buka instans Azure SignalR Service Anda di portal Azure. Di bagian Pengaturan , temukan pengaturan Kunci . Pilih tombol Salin di sebelah kanan string koneksi untuk menyalinnya ke clipboard Anda. Anda dapat menggunakan string koneksi primer atau sekunder.
Masukkan akun penyimpanan string koneksi ke
AzureWebJobsStoragepengaturan.Untuk mendapatkan string, buka akun penyimpanan Anda di portal Azure. Di bagian Keamanan + jaringan, temukan pengaturan Kunci akses. Pilih tombol Salin di sebelah kanan string koneksi untuk menyalinnya ke clipboard Anda. Anda dapat menggunakan string koneksi primer atau sekunder.
Mengalami masalah? Beri tahu kami.
Membuat fungsi untuk mengautentikasi pengguna ke Azure SignalR Service
Saat aplikasi obrolan pertama kali dibuka di browser, aplikasi ini memerlukan info masuk koneksi yang valid untuk terhubung ke Azure SignalR Service. Buat fungsi pemicu HTTP bernama negotiate di aplikasi fungsi Anda untuk mengembalikan informasi koneksi ini.
Catatan
Fungsi ini harus dinamai negotiate karena klien SignalR memerlukan titik akhir yang berakhiran /negotiate.
Dari folder proyek akar, buat
negotiatefungsi dari templat bawaan dengan menggunakan perintah berikut:func new --template "HTTP trigger" --name negotiateBuka src/functions/negotiate.js, perbarui konten sebagai berikut:
const { app, input } = require('@azure/functions'); const inputSignalR = input.generic({ type: 'signalRConnectionInfo', name: 'connectionInfo', hubName: 'default', connectionStringSetting: 'AzureSignalRConnectionString', }); app.post('negotiate', { authLevel: 'anonymous', handler: (request, context) => { return { body: JSON.stringify(context.extraInputs.get(inputSignalR)) } }, route: 'negotiate', extraInputs: [inputSignalR], });Fungsi ini berisi pengikatan pemicu HTTP untuk menerima permintaan dari klien SignalR. Fungsi ini juga berisi pengikatan input SignalR untuk menghasilkan kredensial yang valid bagi klien untuk terhubung ke hub Azure SignalR Service bernama
default.Fungsi ini mengambil informasi koneksi SignalR dari pengikatan input dan mengembalikannya ke klien di isi respons HTTP..
Tidak ada
userIdproperti dalam pengikatansignalRConnectionInfountuk pengembangan lokal. Anda akan menambahkannya nanti untuk mengatur nama pengguna koneksi SignalR saat Anda menyebarkan aplikasi fungsi ke Azure.
Mengalami masalah? Beri tahu kami.
Membuat fungsi untuk mengirim pesan obrolan
Aplikasi web juga memerlukan HTTP API untuk mengirim pesan obrolan. Buat fungsi pemicu HTTP yang mengirim pesan ke semua klien yang terhubung yang menggunakan Azure SignalR Service:
Dari folder proyek akar, buat fungsi pemicu HTTP bernama
sendMessagedari templat dengan menggunakan perintah berikut:func new --name sendMessage --template "Http trigger"Buka file src/functions/sendMessage.js, perbarui konten sebagai berikut:
const { app, output } = require('@azure/functions'); const signalR = output.generic({ type: 'signalR', name: 'signalR', hubName: 'default', connectionStringSetting: 'AzureSignalRConnectionString', }); app.http('messages', { methods: ['POST'], authLevel: 'anonymous', extraOutputs: [signalR], handler: async (request, context) => { const message = await request.json(); message.sender = request.headers && request.headers.get('x-ms-client-principal-name') || ''; let recipientUserId = ''; if (message.recipient) { recipientUserId = message.recipient; message.isPrivate = true; } context.extraOutputs.set(signalR, { 'userId': recipientUserId, 'target': 'newMessage', 'arguments': [message] }); } });Fungsi ini berisi pemicu HTTP dan pengikatan output SignalR. Dibutuhkan isi dari permintaan HTTP dan mengirimkannya ke klien yang terhubung ke Azure SignalR Service. Ini memanggil fungsi
newMessagebernama pada setiap klien.Fungsi ini dapat membaca identitas pengirim dan dapat menerima
recipientnilai dalam isi pesan untuk memungkinkan Anda mengirim pesan secara privat ke satu pengguna. Anda akan menggunakan fungsionalitas ini nanti dalam tutorial.Simpan file.
Mengalami masalah? Beri tahu kami.
Menghosting antarmuka pengguna web klien obrolan
UI aplikasi obrolan adalah aplikasi satu halaman sederhana (SPA) yang dibuat dengan kerangka kerja JavaScript Vue dengan menggunakan klien ASP.NET Core SignalR JavaScript. Untuk kesederhanaan, aplikasi fungsi menghosting halaman web. Di lingkungan produksi, Anda dapat menggunakan Static Web Apps untuk menghosting halaman web.
Buat file bernama index.html di direktori akar proyek fungsi Anda.
Salin dan tempel konten index.html ke file Anda. Simpan file.
Dari folder proyek akar, buat fungsi pemicu HTTP bernama
indexdari templat dengan menggunakan perintah ini:func new --name index --template "Http trigger"Ubah konten src/functions/index.js ke kode berikut:
const { app } = require('@azure/functions'); const { readFile } = require('fs/promises'); app.http('index', { methods: ['GET'], authLevel: 'anonymous', handler: async (context) => { const content = await readFile('index.html', 'utf8', (err, data) => { if (err) { context.err(err) return } }); return { status: 200, headers: { 'Content-Type': 'text/html' }, body: content, }; } });Fungsi membaca halaman web statis dan mengembalikannya kepada pengguna.
Uji aplikasi Anda secara lokal. Mulai aplikasi fungsi dengan menggunakan perintah ini:
func startBuka
http://localhost:7071/api/indexdi browser web Anda. Halaman web obrolan akan muncul.
Masukkan pesan di kotak obrolan.
Setelah Anda memilih tombol Enter, pesan muncul di halaman web. Karena nama pengguna klien SignalR tidak diatur, Anda mengirim semua pesan secara anonim.
Mengalami masalah? Beri tahu kami.
Sebarkan ke Azure dan aktifkan autentikasi
Anda telah menjalankan aplikasi fungsi dan aplikasi obrolan secara lokal. Sekarang, sebarkan ke Azure dan aktifkan autentikasi dan olahpesan privat.
Mengonfigurasi aplikasi fungsi untuk autentikasi
Sejauh ini, aplikasi obrolan berfungsi secara anonim. Di Azure, Anda akan menggunakan autentikasi App Service untuk mengautentikasi pengguna. ID pengguna atau nama pengguna pengguna yang diautentikasi diteruskan ke SignalRConnectionInfo pengikatan untuk menghasilkan informasi koneksi yang diautentikasi sebagai pengguna.
Buka file src/functions/negotiate.js .
userIdSisipkan properti ke dalam pengikataninputSignalRdengan nilai{headers.x-ms-client-principal-name}. Nilai ini adalah ekspresi pengikatan yang mengatur nama pengguna klien SignalR ke nama pengguna yang diautentikasi. Pengikatan sekarang akan terlihat seperti contoh ini:const inputSignalR = input.generic({ type: 'signalRConnectionInfo', name: 'connectionInfo', hubName: 'default', connectionStringSetting: 'AzureSignalRConnectionString', userId: '{headers.x-ms-client-principal-name}' });Simpan file.
Menyebarkan aplikasi fungsi ke Azure
Sebarkan aplikasi fungsi ke Azure dengan menggunakan perintah berikut:
func azure functionapp publish <your-function-app-name> --publish-local-settings
Opsi menerbitkan --publish-local-settings pengaturan lokal Anda dari file local.settings.json ke Azure, sehingga Anda tidak perlu mengonfigurasinya lagi di Azure.
Mengaktifkan autentikasi App Service
Azure Functions mendukung autentikasi dengan ID Microsoft Entra, Facebook, X, akun Microsoft, dan Google. Anda akan menggunakan Microsoft sebagai penyedia identitas untuk tutorial ini.
Di portal Azure, buka halaman sumber daya aplikasi fungsi Anda.
Pilih Pengaturan>Autentikasi.
Pilih Tambahkan penyedia identitas .
Di daftar Penyedia identitas, pilih Microsoft. Kemudian pilih Tambahkan.
Pengaturan yang telah selesai membuat pendaftaran aplikasi yang mengaitkan penyedia identitas Anda dengan aplikasi fungsi Anda.
Untuk informasi selengkapnya tentang penyedia identitas yang didukung, lihat artikel berikut ini:
Coba aplikasi
- Buka
https://<YOUR-FUNCTION-APP-NAME>.azurewebsites.net/api/index. - Pilih Masuk untuk mengautentikasi dengan penyedia autentikasi pilihan Anda.
- Kirim pesan publik dengan memasukkannya di kotak obrolan utama.
- Kirim pesan privat dengan memilih nama pengguna dalam riwayat obrolan. Hanya penerima terpilih yang menerima pesan ini.
Selamat! Anda menyebarkan aplikasi obrolan tanpa server real time.
Mengalami masalah? Beri tahu kami.
Membersihkan sumber daya
Untuk membersihkan sumber daya yang Anda buat dalam tutorial ini, hapus grup sumber daya dengan menggunakan portal Azure.
Perhatian
Menghapus grup sumber daya akan menghapus semua sumber daya yang ada di dalamnya. Jika grup sumber daya berisi sumber daya di luar cakupan tutorial ini, grup sumber daya juga akan dihapus.
Mengalami masalah? Beri tahu kami.
Langkah berikutnya
Dalam tutorial ini, Anda mempelajari cara menggunakan Azure Functions dengan Azure SignalR Service. Baca selengkapnya tentang membangun aplikasi tanpa server real time dengan pengikatan Azure SignalR Service untuk Azure Functions: