Azure Functions を使用して、信頼できるユーザー アクセス サービスを構築する
この記事では、Azure Functions を使用して、信頼できるユーザー アクセス サービスを構築する方法について説明します。
重要
このチュートリアルの最後で作成されるエンドポイントは、セキュリティで保護されていません。 セキュリティの詳細については、Azure Functions のセキュリティに関する記事を必ず参照してください。 不正なアクターがトークンをプロビジョニングできないように、エンドポイントにセキュリティを追加する必要があります。
コードをダウンロードする
このクイックスタートの最終的なコードは GitHub にあります
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 詳細については、アカウントの無料作成に関するページを参照してください。
- サポートされているプラットフォームのいずれかにインストールされた Visual Studio Code。
-
Node.js。アクティブ LTS およびメンテナンス LTS バージョン (10.14.1 を推奨)。
node --version
コマンドを使用して、現在のバージョンを確認してください。 - Visual Studio Code 用 Azure Functions 拡張機能。
- アクティブな Communication Services リソースと接続文字列。 Communication Services リソースを作成します。
概要
このチュートリアルでは、信頼できるトークン プロビジョニング サービスとして機能する Azure Functions を作成します。 このチュートリアルを使用して、独自のトークン プロビジョニング サービスをブートストラップできます。
このサービスは、Azure Communication Services に対するユーザーの認証を担当します。 Communication Services アプリケーションのユーザーは、チャット スレッドおよび VoIP 通話に参加するために Access Token
が必要になります。 Azure Functions は、ユーザーと Communication Services の間で信頼できる仲介者として機能します。 これにより、リソース接続文字列をユーザーに公開せずにアクセス トークンをプロビジョニングできます。
詳細については、クライアント - サーバー アーキテクチャおよび認証と認可の概念に関するドキュメントを参照してください。
設定
Azure Functions の設定
最初に Azure Functions の基本構造を設定します。 設定のステップ バイ ステップの手順については、以下を参照してください。Visual Studio Code を使用して関数を作成する
Azure Functions には、次の構成が必要です。
- [言語]JavaScript
- テンプレート:HTTP トリガー
- 認可レベル:匿名 (別の認可モデルを使用する場合は、後で切り替えることができます)
- 関数名:ユーザー定義
上記の構成を使用して Azure Functions の手順を実行すると、Visual Studio Code に Azure Functions のプロジェクトがあり、そこに関数自体を含む index.js
ファイルがあるはずです。 このファイル内のコードは以下のようになっているはずです。
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
const name = (req.query.name || (req.body && req.body.name));
const responseMessage = name
? "Hello, " + name + ". This HTTP triggered function executed successfully."
: "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
context.res = {
// status: 200, /* Defaults to 200 */
body: responseMessage
};
}
次に、Azure Communication Services ライブラリのインストールに進みます。
Communication Services ライブラリをインストールする
Identity
ライブラリを使用して User Access Tokens
を生成します。
npm install
コマンドを使用して、JavaScript 用の Azure Communication Services Identity SDK をインストールします。
npm install @azure/communication-identity --save
--save
オプションを使用すると、package.json ファイル内の依存関係としてライブラリが表示されます。
index.js
ファイルの先頭で、CommunicationIdentityClient
のインターフェイスをインポートします。
const { CommunicationIdentityClient } = require('@azure/communication-identity');
アクセス トークンの生成
Azure Functions で User Access Tokens
を生成できるようにするには、最初に Communication Services リソースの接続文字列を使用する必要があります。
接続文字列の取得の詳細については、リソース プロビジョニングのクイックスタートに関するページを参照してください。
const connectionString = 'INSERT YOUR RESOURCE CONNECTION STRING'
次に、元の関数を変更して User Access Tokens
を生成します。
User Access Tokens
は、createUser
メソッドからユーザーを作成することによって生成されます。 ユーザーが作成されたら、getToken
メソッドを使用して、Azure Functions から返されるそのユーザーのトークンを生成できます。
この例では、トークンのスコープを voip
に構成します。 ご使用のアプリケーションに他のスコープが必要な場合があります。 詳しくは、スコープに関するページを参照してください。
module.exports = async function (context, req) {
let tokenClient = new CommunicationIdentityClient(connectionString);
const user = await tokenClient.createUser();
const userToken = await tokenClient.getToken(user, ["voip"]);
context.res = {
body: userToken
};
}
既存の Communication Services CommunicationUser
では、作成手順をスキップして、アクセス トークンを生成するだけで済みます。 詳細については、ユーザー アクセス トークン作成のクイックスタートに関するページを参照してください。
Azure Functions をテストする
F5
を使用して Azure Functions をローカルで実行します。 これにより、Azure Functions がローカルで初期化され、http://localhost:7071/api/FUNCTION_NAME
によってアクセスできるようになります。
ローカルでの実行に関する追加のドキュメントを確認してください
お使いのブラウザーで URL を開くと、Communication のユーザー ID、トークン、トークンの有効期限を含む応答本文が表示されます。
関数を Azure にデプロイする
Azure 関数をデプロイするには、ステップ バイ ステップの手順に従います。
まとめると、次のことを行う必要があります。
- Visual Studio から Azure にサインインする
- プロジェクトを Azure アカウントに発行します。 ここでは、既存のサブスクリプションを選択する必要があります。
- Visual Studio ウィザードを使用して新しい Azure Functions リソースを作成するか、既存のリソースを使用します。 新しいリソースの場合は、目的のリージョン、ランタイム、一意の識別子に構成する必要があります。
- デプロイが完了するまで待機する
- 関数 🎉 を実行する
Azure 関数を実行する
URL http://<function-appn-ame>.azurewebsites.net/api/<function-name>
を使用して Azure 関数を実行する
URL を見つけるには、Visual Studio Code で関数を右クリックし、関数の URL をコピーします。
詳細については、Azure 関数の実行に関するページを参照してください。
Azure Functions のセキュリティ保護
ユーザーのアクセス トークンをプロビジョニングするために信頼されたサービスを設定する一環として、そのエンドポイントのセキュリティを考慮して、不正なアクターがサービスのトークンをランダムに作成できないようにする必要があります。 Azure Functions には、さまざまな種類の認証ポリシーを使用してエンドポイントをセキュリティで保護するために使用できる組み込みのセキュリティ機能が用意されています。 詳細は、Azure Functions のセキュリティに関する記事を参照してください。
リソースをクリーンアップする
Communication Services サブスクリプションをクリーンアップして解除する場合は、リソースまたはリソース グループを削除できます。 リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。 Azure Communication Service のリソースのクリーンアップと Azure Functions のリソースのクリーンアップに関する詳細を確認できます。
次の手順
次のことも実行できます。