Öğretici: Azure İşlevleri ile Azure SignalR Hizmeti kimlik doğrulaması
Azure İşlevleri, App Service Kimlik Doğrulaması ve SignalR Hizmeti ile kimlik doğrulaması ve özel mesajlaşma özelliklerine sahip bir sohbet odası oluşturma öğreticisi.
Giriş
Kullanılan teknolojiler
- Azure İşlevleri: Kullanıcıların kimliğini doğrulamak ve sohbet iletisi göndermek için kullanılan arka uç API'si
- Azure SignalR Hizmeti: Yeni iletileri bağlı sohbet istemcilerine yayınlar
- Azure Depolama: Sohbet istemcisi arabirimi için statik web sitesini barındırır
Önkoşullar
Bu öğreticiyi oluşturmak için aşağıdaki yazılımlar gereklidir.
- Git
- Node.js (Sürüm 10.x)
- .NET SDK (Sürüm 2.x, İşlevler uzantıları için gereklidir)
- Azure İşlevleri Temel Araçları (Sürüm 2)
- Visual Studio Code (VS Code) ve aşağıdaki uzantılar
- Azure İşlevleri - VS Code'da Azure İşlevleri ile çalışmak için
- Canlı Sunucu - Test amacıyla yerel ortamda web sayfası sunmak için
Sorun mu yaşıyorsunuz? Bize bilgi verin.
Azure portalda oturum açma
Azure portala gidin ve kimlik bilgilerinizle oturum açın.
Sorun mu yaşıyorsunuz? Bize bilgi verin.
Azure SignalR Hizmeti örneği oluşturma
Azure İşlevleri uygulamasını yerel ortamda derleyecek ve test edeceksiniz. Uygulama, Azure'da önceden oluşturulması gereken bir SignalR Hizmeti örneğine erişecek.
Yeni bir Azure kaynağı oluşturmak için kaynak oluştur ( + ) düğmesine tıklayın.
SignalR Hizmeti araması yapın ve sonuçlardan seçin. Oluştur’a tıklayın.

Aşağıdaki bilgileri girin.
Name Değer Kaynak adı SignalR Hizmeti örneği için benzersiz bir ad Kaynak grubu Benzersiz bir ada sahip yeni bir kaynak grubu oluşturun Konum Size yakın bir konum seçin Fiyatlandırma Katmanı Ücretsiz Oluştur’a tıklayın.
Örnek dağıtıldıktan sonra portalda açın ve ayarlar sayfasını bulun. Hizmet modu ayarını sunucusuz olarak değiştirin.

Sorun mu yaşıyorsunuz? Bize bilgi verin.
İşlev uygulamasını başlatma
Yeni bir Azure İşlevleri projesi oluşturma
Yeni bir VS Code penceresinde menüden
File > Open Folderseçeneğini kullanarak uygun konumda boş bir klasör oluşturun ve açın. Bu derleyeceğiniz uygulamanın ana proje klasörü olacaktır.VS Code Azure İşlevleri uzantısını kullanarak ana proje klasöründe bir İşlev uygulaması başlatın.
Menüden Görünüm > Komut Paleti yolunu izleyerek (kısayol
Ctrl-Shift-P, macOS:Cmd-Shift-P) VS Code'da Komut Paletini açın.Azure İşlevleri: Yeni Proje Oluştur komutunu arayın ve seçin.
Ana proje klasörü görünmelidir. Bu klasörü seçin (veya "Gözat" düğmesini kullanarak bulun).
Dil seçmeniz istendiğinde JavaScript'i seçin.

İşlev uygulaması uzantılarını yükleme
Bu öğreticide Azure SignalR Hizmeti ile etkileşim kurmak için Azure İşlevleri bağlamaları kullanılır. Diğer bağlamalar gibi SignalR Hizmeti bağlamaları da kullanılabilmesi için Azure İşlevleri Temel Araçları CLI aracılığıyla yüklenmesi gereken bir uzantı olarak sunulur.
Menüden > terminali görüntüle ' ye (Ctrl-) seçerek vs Code bir Terminal açın ` .
Geçerli dizinin ana proje dizini olduğundan emin olun.
SignalR Hizmeti işlev uygulaması uzantısını yükleyin.
func extensions install -p Microsoft.Azure.WebJobs.Extensions.SignalRService -v 1.0.0
Uygulama ayarlarını yapılandırma
Azure İşlevleri çalışma zamanını yerel ortamda çalıştırma ve hata ayıklama sırasında uygulama ayarları local.settings.json dosyasından okunur. Bu uygulamayı güncelleştirerek oluşturduğunuz SignalR Hizmeti örneğinin bağlantı dizesini ekleyin.
VS Code'un Gezgin bölmesinde local.settings.json dosyasını seçerek açın.
Dosyanın içeriğini aşağıdakilerle değiştirin.
{ "IsEncrypted": false, "Values": { "AzureSignalRConnectionString": "<signalr-connection-string>", "WEBSITE_NODE_DEFAULT_VERSION": "10.14.1", "FUNCTIONS_WORKER_RUNTIME": "node" }, "Host": { "LocalHttpPort": 7071, "CORS": "http://127.0.0.1:5500", "CORSCredentials": true } }Azure SignalR Hizmeti bağlantı dizesini
AzureSignalRConnectionStringadlı bir ayara girin. Azure portaldan Azure SignalR Hizmeti kaynağının Anahtarlar sayfasındaki değeri alın. Birincil veya ikincil bağlantı dizesini kullanabilirsiniz.WEBSITE_NODE_DEFAULT_VERSIONayarı yerel ortamda kullanılmaz ancak uygulama Azure'a dağıtıldığında kullanılması gerekir.Hostbölümü yerel İşlevler ana bilgisayarı için bağlantı noktası ve CORS ayarlarını yapılandırır (Azure'da çalışırken bu ayarın bir etkisi yoktur).Not
Canlı sunucu, genellikle içeriği sunacak şekilde yapılandırılır
http://127.0.0.1:5500. Farklı bir URL kullandığını fark ederseniz veya farklı bir HTTP sunucusu kullanıyorsanız,CORSayarı doğru kaynağı yansıtacak şekilde değiştirin.
Dosyayı kaydedin.
Sorun mu yaşıyorsunuz? Bize bilgi verin.
Kullanıcıların SignalR Hizmetinde kimlik doğrulamasını sağlayacak işlevi oluşturma
Sohbet uygulaması tarayıcıda ilk açıldığında Azure SignalR Hizmetine bağlanmak için gerekli bağlantı kimlik bilgilerine ihtiyaç duyar. Bu bağlantı bilgilerini döndürmek için işlev uygulamanızda Negotiate ADLı bir http ile tetiklenen işlev oluşturacaksınız.
Not
SignalR istemcisi, içinde sonlanan bir uç nokta gerektirdiğinden bu işleve bir anlaşma adı verilmelidir /negotiate .
VS Code komut paletini açın (
Ctrl-Shift-P, macOS:Cmd-Shift-P).Azure İşlevleri: İşlev Oluştur komutunu arayın ve seçin.
İstendiğinde aşağıdaki bilgileri girin.
Ad Değer İşlev uygulamasının klasörü Ana proje klasörünü seçin Şablon HTTP Tetikleyicisi Ad negotiate Yetkilendirme düzeyi Anonim Yeni işlevi içeren Negotiate adlı bir klasör oluşturulur.
İşlev için bağlamaları yapılandırmak üzere Negotiate/function.json açın. Dosyanın içeriğini aşağıdaki kodla değiştirin. Bu kod bir istemcinin
chatadlı Azure SignalR Hizmeti hub'ına bağlanması için geçerli kimlik bilgileri oluşturan bir giriş bağlaması ekler.{ "disabled": false, "bindings": [ { "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req" }, { "type": "http", "direction": "out", "name": "res" }, { "type": "signalRConnectionInfo", "name": "connectionInfo", "userId": "", "hubName": "chat", "direction": "in" } ] }signalRConnectionInfobağlamasındakiuserIdözelliği kimliği doğrulanmış SignalR Hizmeti bağlantısı oluşturmak için kullanılır. Yerel ortamda geliştirme için bu özelliği boş bırakın. İşlev uygulaması Azure'a dağıtıldığında bu özelliği kullanacaksınız.İşlevin gövdesini görüntülemek için Negotiate/index.js açın. Dosyanın içeriğini aşağıdaki kodla değiştirin.
module.exports = async function (context, req, connectionInfo) { context.res.body = connectionInfo; };Bu işlev giriş bağlamasındaki SignalR bağlantısı bilgilerini alır ve HTTP yanıtı gövdesinde istemciye döndürür. SignalR istemcisi bu bilgileri SignalR hizmeti örneğine bağlanmak için kullanır.
Sorun mu yaşıyorsunuz? Bize bilgi verin.
Sohbet iletisi göndermek için işlev oluşturma
Web uygulaması, sohbet iletisi göndermek için bir HTTP API'sine ihtiyaç duyar. SignalR Hizmetini kullanarak bağlı olan tüm istemcilere ileti gönderen SendMessage adlı bir HTTP ile tetiklenen işlev oluşturacaksınız.
VS Code komut paletini açın (
Ctrl-Shift-P, macOS:Cmd-Shift-P).Azure İşlevleri: İşlev Oluştur komutunu arayın ve seçin.
İstendiğinde aşağıdaki bilgileri girin.
Ad Değer İşlev uygulamasının klasörü ana proje klasörünü seçin Şablon HTTP Tetikleyicisi Ad SendMessage Yetkilendirme düzeyi Anonim Yeni işlevi içeren SendMessage adlı bir klasör oluşturulur.
İşlev bağlamalarını yapılandırmak için SendMessage/function.json dosyasını açın. Dosyanın içeriğini aşağıdaki kodla değiştirin.
{ "disabled": false, "bindings": [ { "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "route": "messages", "methods": [ "post" ] }, { "type": "http", "direction": "out", "name": "res" }, { "type": "signalR", "name": "$return", "hubName": "chat", "direction": "out" } ] }Bu kod özgün işlevde iki değişiklik yapar:
- Yolu
messagesolarak değiştirir ve HTTP tetikleyicisini POST HTTP metoduyla sınırlar. - Adlı bir SignalR hizmet merkezine bağlı tüm istemcilere işlev tarafından döndürülen bir ileti gönderen bir SignalR hizmeti çıkış bağlaması ekler
chat.
- Yolu
Dosyayı kaydedin.
İşlevin gövdesini görüntülemek için SendMessage/index.js dosyasını açın. Dosyanın içeriğini aşağıdaki kodla değiştirin.
module.exports = async function (context, req) { const message = req.body; message.sender = req.headers && req.headers['x-ms-client-principal-name'] || ''; let recipientUserId = ''; if (message.recipient) { recipientUserId = message.recipient; message.isPrivate = true; } return { 'userId': recipientUserId, 'target': 'newMessage', 'arguments': [ message ] }; };Bu işlev HTTP isteğinin gövdesini alır ve SignalR Hizmetine bağlı istemcilere göndererek her istemcide
newMessageadlı bir işlevi çağırır.İşlev gönderenin kimliğini okuyabilir ve ileti gövdesine eklenebilecek bir alıcı değeriyle iletinin tek bir kullanıcıya gönderilmesini sağlayabilir. Bu işlevler öğreticinin ilerleyen bölümlerinde kullanılacaktır.
Dosyayı kaydedin.
Sorun mu yaşıyorsunuz? Bize bilgi verin.
Sohbet istemcisi web kullanıcı arabirimini oluşturma ve çalıştırma
Sohbet uygulamasının arabirimi, Vue JavaScript çerçevesiyle oluşturulan basit bir tek sayfalı uygulamadır (SPA). İşlev uygulamasından ayrı barındırılacaktır. Yerel ortamda web arabirimini çalıştırmak için Canlı Sunucu VS Code uzantısını kullanacaksınız.
VS Code'da ana proje klasörünün kök dizininde content adlı yeni bir klasör oluşturun.
content klasöründe index.html adlı bir dosya oluşturun.
Aşağıdaki içeriği kopyalayıp index.html dosyasına yapıştırın.
Dosyayı kaydedin.
F5 tuşuna basarak işlev uygulamasını yerel ortamda çalıştırın ve bir hata ayıklayıcısı ekleyin.
index.html dosyası açıkken VS Code komut paletini açarak (
Ctrl-Shift-P, macOS:Cmd-Shift-P) ve Canlı Sunucu: Canlı Sunucu ile Aç'ı seçerek Canlı Sunucuyu başlatın. Canlı Sunucu uygulamayı bir tarayıcıda açar.Uygulama açılır. Sohbet kutusuna ileti yazıp Enter tuşuna basın. Yeni iletileri görmek için uygulamayı yenileyin. Kimlik doğrulaması yapılandırılmadığından tüm iletiler "anonim" olarak gönderilir.
Sorun mu yaşıyorsunuz? Bize bilgi verin.
Azure'a dağıtma ve kimlik doğrulamasını etkinleştirme
Buraya kadar işlev uygulamasını ve sohbet uygulamasını yerel ortamda çalıştırdınız. Şimdi bunları Azure'a dağıtıp kimlik doğrulamasını ve uygulamanın özel mesajlaşma özelliğini etkinleştireceksiniz.
VS Code ile Azure'da oturum açma
VS Code komut paletini açın (
Ctrl-Shift-P, macOS:Cmd-Shift-P).Azure: Oturum aç komutunu bulun ve seçin.
Yönergeleri izleyerek tarayıcınızda oturum açma işlemlerini tamamlayın.
Depolama hesabı oluşturma
Azure depolama hesabı, Azure 'da çalışan bir işlev uygulaması için gereklidir. Ayrıca, Azure Storage 'ın statik Web siteleri özelliğini kullanarak sohbet kullanıcı arabirimi için Web sayfasını barıncaksınız.
Azure portal yeni bir Azure kaynağı oluşturmak için kaynak oluştur ( + ) düğmesine tıklayın.
Depolama kategorisini seçin ve depolama hesabı' nı seçin.
Aşağıdaki bilgileri girin.
Name Değer Abonelik SignalR hizmet örneğini içeren aboneliği seçin Kaynak grubu Aynı kaynak grubunu seçin Kaynak adı Depolama hesabı için benzersiz bir ad Konum Diğer kaynaklarınızla aynı konumu seçin Performans Standart Hesap türü StorageV2 (genel amaçlı V2) Çoğaltma Yerel olarak yedekli depolama (LRS) Erişim katmanı Sık Erişimli Gözden geçir + oluştur ve sonra Oluştur' a tıklayın.
Statik Web sitelerini yapılandırma
Depolama hesabı oluşturulduktan sonra, Azure portal açın.
Statik Web sitesi seçin.
Statik Web sitesi özelliğini etkinleştirmek için etkin ' i seçin.
Dizin belgesi adı alanına index.html yazın.
Kaydet’e tıklayın.
Birincil uç nokta görünür. Bu değeri aklınızda edin. İşlev uygulamasını yapılandırmak için gerekli olacaktır.
İşlev uygulamasını kimlik doğrulaması için yapılandırma
Şu ana kadar sohbet uygulaması anonim çalışıyordu. Kullanıcıların kimliğini doğrulamak için Azure'da App Service Kimlik Doğrulamasını kullanacaksınız. Kimliği doğrulanmış olan kullanıcının kimliği veya kullanıcı adı SignalRConnectionInfo bağlamasına iletilerek kullanıcı olarak kimliği doğrulanan bağlantı bilgileri oluşturulabilir.
İleti gönderirken uygulama bağlı tüm istemcilere veya yalnızca belirli bir kullanıcı için kimliği doğrulanmış olan istemcilere gönderme seçenekleri arasında seçim yapabilir.
VS Code, üzerinde anlaş/function.js açın.
SignalRConnectionInfo bağlamasının userId özelliğine bir bağlama ifadesi ekleyin:
{headers.x-ms-client-principal-name}. Bu ifade değeri kimliği doğrulanmış kullanıcının kullanıcı adı olarak ayarlar. Öznitelik şimdi aşağıdaki gibi görünmelidir.{ "type": "signalRConnectionInfo", "name": "connectionInfo", "userId": "{headers.x-ms-client-principal-name}", "hubName": "chat", "direction": "in" }Dosyayı kaydedin.
İşlev uygulamasını Azure 'a dağıtma
VS Code komut paletini açın (
Ctrl-Shift-P, macOS:Cmd-Shift-P) ve Azure İşlevleri: İşlev Uygulamasına Dağıt komutunu seçin.İstendiğinde aşağıdaki bilgileri girin.
Ad Değer Dağıtılacak klasör Ana proje klasörünü seçin Abonelik Aboneliğinizi seçin İşlev uygulaması Yeni İşlev Uygulaması Oluştur'u seçin İşlev uygulamasının adı Benzersiz bir ad girin Kaynak grubu SignalR Hizmeti örneğinin bulunduğu kaynak grubunu seçin Depolama hesabı Daha önce oluşturduğunuz depolama hesabını seçin Azure'da yeni bir işlev uygulaması oluşturulur ve dağıtım başlar. Dağıtımın tamamlanmasını bekleyin.
İşlev uygulaması yerel ayarlarını karşıya yükleme
VS Code komut paletini açın (
Ctrl-Shift-P, macOS:Cmd-Shift-P).Azure İşlevleri: Yerel ayarları karşıya yükle komutunu arayın ve seçin.
İstendiğinde aşağıdaki bilgileri girin.
Ad Değer Yerel ayarlar dosyası local.settings.json Abonelik Aboneliğinizi seçin İşlev uygulaması Önceden dağıtılmış işlev uygulamasını seçin
Yerel ayarlar, Azure'daki işlev uygulamasına yüklenir. Geçerli ayarların üzerine yazmak isteyip istemediğiniz sorulduğunda Tümüne evet'i seçin.
App Service Kimlik Doğrulamayı Etkinleştirme
App Service Kimlik Doğrulaması; Azure Active Directory, Facebook, Twitter, Microsoft hesabı ve Google ile kimlik doğrulamayı destekler.
VS Code komut paletini açın (
Ctrl-Shift-P, macOS:Cmd-Shift-P).Azure İşlevleri: Portalda aç komutunu arayın ve seçin.
İşlev uygulamasını Azure portalda açmak için aboneliği ve işlev uygulaması adını seçin.
Portalda açılan işlev uygulamasında platform özellikleri sekmesini bulun, kimlik doğrulama/yetkilendirme' yi seçin.
App Service Kimlik Doğrulama ayarını Açık duruma getirin.
İsteğin kimliği doğrulanmamış olduğunda gerçekleştirilecek eylem menüsünde "{Seçtiğiniz kimlik doğrulaması sağlayıcısı} ile oturum aç"ı seçin.
İzin Verilen Dış Yönlendirme URL'leri bölümünde önceden not ettiğiniz depolama hesabı birincil web uç noktası URL'sini girin.
Yapılandırmayı tamamlamak için seçtiğiniz oturum açma hizmeti sağlayıcısının belgelerini inceleyin.
Web uygulamasını güncelleştirme
Azure portalda işlev uygulamasının genel bakış sayfasına gidin.
İşlev uygulamasının URL'sini kopyalayın.

VS Code'da index.html dosyasını açın ve
apiBaseUrldeğerini işlev uygulamasının URL'siyle değiştirin.Uygulama Azure Active Directory, Facebook, Twitter, Microsoft hesabı veya Google ile kimlik doğrulaması gerçekleştirilecek şekilde yapılandırılabilir.
authProviderdeğerini ayarlayarak kullanmak istediğiniz kimlik doğrulaması sağlayıcısını seçin.Dosyayı kaydedin.
Web uygulamasını blob depolamaya dağıtma
Web uygulamasını Azure Blob Depolama'nın statik web siteleri özelliğini kullanarak barındıracağız.
VS Code komut paletini açın (
Ctrl-Shift-P, macOS:Cmd-Shift-P).Azure Depolama: Statik Web Sitesine Dağıt komutunu arayın ve seçin.
Aşağıdaki değerleri girin:
Name Değer Abonelik Aboneliğinizi seçin Depolama hesabı Daha önce oluşturduğunuz depolama hesabını seçin Dağıtılacak klasör Araştır ' ı seçin ve içerik klasörünü seçin
İçerik klasöründeki dosyalar artık statik Web sitesine dağıtılmalıdır.
İşlev uygulamasında çıkış noktaları arası kaynak paylaşımını (CORS) etkinleştirme
local.settings.json dosyasında CORS seçeneği mevcut olsa da Azure'daki işlev uygulamasına yüklenmez. Bunu ayrıca ayarlamanız gerekir.
İşlev uygulamasını Azure Portal’da açın.
Platform özellikleri sekmesinde CORS' yi seçin.

Izin verilen kaynaklar bölümünde, değer olarak statik Web sitesi birincil uç noktasına sahip bir giriş ekleyin (sondaki değeri kaldırın / ).
SignalR JavaScript SDK 'Sı, işlev uygulamanızı bir tarayıcıdan çağırmak için, CORS 'de kimlik bilgileri desteğinin etkinleştirilmesi gerekir. "Erişim-denetim-Izin-kimlik bilgilerini etkinleştir" onay kutusunu seçin.

CORS ayarlarını kalıcı hale getirmek için Kaydet'e tıklayın.
Uygulamayı deneyin
Bir tarayıcıdan depolama hesabınızın birincil web uç noktasına gidin.
Seçtiğiniz kimlik doğrulaması sağlayıcısıyla kimlik doğrulaması gerçekleştirmek için Oturum aç'ı seçin.
Ana sohbet kutusunu kullanarak genel ileti gönderin.
Sohbet geçmişindeki kullanıcı adlarından birine tıklayarak özel ileti gönderin. İletiler yalnızca seçilen alıcıya gönderilir.
Tebrikler! Gerçek zamanlı bir sunucusuz sohbet uygulaması dağıttınız!

Sorun mu yaşıyorsunuz? Bize bilgi verin.
Kaynakları temizleme
Bu öğretici ile oluşturulan kaynakları temizlemek için Azure portalı kullanarak kaynak grubunu silebilirsiniz.
Sorun mu yaşıyorsunuz? Bize bilgi verin.
Sonraki adımlar
Bu öğreticide, Azure İşlevleri’ni Azure SignalR Hizmeti ile birlikte kullanmayı öğrendiniz. Azure İşlevleri için SignalR Hizmeti bağlamalarıyla gerçek zamanlı sunucusuz uygulama derleme hakkında daha fazla bilgi edinin.