MRが楽しい

MRやVRについて学習したことを書き残す

AzureのSignalRServiceを使ってサーバからHoloLens2にデータを送信する その4(Authorization levelをFunctionにした場合)

本日は Azure と HoloLens2 の技術調査枠です。
Azure の SignalRService を使ってサーバから HoloLens2 にデータを送信する方法を試したので作業記録を記事にします。
f:id:bluebirdofoz:20210628225001j:plain

前回記事の続きです。
bluebirdofoz.hatenablog.com

Azure FunctionのAuthorization levelをFunctionにした場合

前回記事で Tips に記述した通り、Authorization level を Anonymous にした場合、URL を知っていれば誰でもアクセス可能になります。
本記事では Authorization level を Function に設定し、関数キーを知っている人のみアクセス可能なようにする場合の手順を記録します。

Azure Function関数の変更

最初に Azure Function に登録している関数の Authorization level を Function に変更します。

パッケージで作成済みの関数を削除する

前々回作成した関数を削除します。
ただしパッケージファイルから発行した関数は[関数]タブからは削除できません。
f:id:bluebirdofoz:20210628225138j:plain

パッケージファイルから発行した関数を削除するには[構成]タブを開きます。
[WEBSITE_RUN_FROM_PACKAGE]の設定を削除し、変更内容を[保存]します。
f:id:bluebirdofoz:20210628225152j:plain

これで作成した関数が削除されます。
f:id:bluebirdofoz:20210628225206j:plain

Authorization levelの変更

Azure Function の関数プロジェクトを開きます。
以下の通り、AuthorizationLevel の設定を AuthorizationLevel.Function に変更します。
f:id:bluebirdofoz:20210628225217j:plain

この設定で改めて関数の発行を行います。
f:id:bluebirdofoz:20210628225228j:plain

発行が完了したら設定が正しく行われているか AzurePortal で確認してみます。
Azure Function のページを開き、[関数]タブから関数を選択します。
f:id:bluebirdofoz:20210628225245j:plain

関数のページが開いたら[コードとテスト]タブを開きます。
[authLevel]の項目が[function]になっていれば、正しく設定できています。
f:id:bluebirdofoz:20210628225303j:plain

クライアントアプリの変更

次にクライアントアプリを修正します。

関数キーの取得

Authorization level が Function の関数にアクセスするには関数キーが必要です。
関数のページを開き、[関数キー]タブを開きます。
f:id:bluebirdofoz:20210628225316j:plain

関数キーの[値]を表示し、メモしておきます。
f:id:bluebirdofoz:20210628225325j:plain

なお、関数キーは関数ごとにメモしておく必要があります。
今回は negotiate と broadcast の2つの関数の関数キーをメモしました。
f:id:bluebirdofoz:20210628225338j:plain

x-functions-keyの追加

クライアントアプリのプロジェクトを開きます。
それぞれの関数アクセスに x-functions-key の headers 情報を追加します。
f:id:bluebirdofoz:20210628225459j:plain

HubConnectionBuilder().WithUrl 関数の場合は以下の通り、headers 情報を設定します。

this.Connection = new HubConnectionBuilder().WithUrl($"{RootUrl}/api",
    options =>
    {
        options.Headers["x-functions-key"] = AZURE_FUNCTION_KEY;
    }).Build();

HttpClient の場合は以下の通り、headers 情報を設定します。

this.HttpClient.DefaultRequestHeaders.Add("x-functions-key", AZURE_FUNCTION_KEY);

AZURE_FUNCTION_KEY の部分にはそれぞれの関数キーを設定します。
コードを以下の通り修正しました。
f:id:bluebirdofoz:20210628225530j:plain

メニューから[ビルド -> (プロジェクト名)のリビルド]を選択し、再ビルドを行います。
f:id:bluebirdofoz:20210628225541j:plain

動作確認

クライアントアプリを起動します。
[Connect]ボタンを押して、Azure Function を通して SignalR に接続できることを確認します。
f:id:bluebirdofoz:20210628225552j:plain

アプリを2つ立ち上げて[Broadcast]ボタンも正常に動作していることを確認します。
f:id:bluebirdofoz:20210628225604j:plain

長くなったので分けます。
次は HoloLens2 用クライアントアプリの作成です。
bluebirdofoz.hatenablog.com