Azure Functions を使用して、信頼できるユーザー アクセス サービスを構築する

この記事では、Azure Functions を使用して、信頼できるユーザー アクセス サービスを構築する方法について説明します。

重要

このチュートリアルの最後で作成されるエンドポイントは、セキュリティで保護されていません。 セキュリティの詳細については、Azure Functions のセキュリティに関する記事を必ず参照してください。 不正なアクターがトークンをプロビジョニングできないように、エンドポイントにセキュリティを追加する必要があります。

コードをダウンロードする

このクイックスタートの最終的なコードは GitHub にあります

前提条件

概要

信頼できるサービスのアーキテクチャの図

このチュートリアルでは、信頼できるトークン プロビジョニング サービスとして機能する 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 Functions の応答例を示すスクリーンショット。

関数を Azure にデプロイする

Azure 関数をデプロイするには、ステップ バイ ステップの手順に従います。

まとめると、次のことを行う必要があります。

  1. Visual Studio から Azure にサインインする
  2. プロジェクトを Azure アカウントに発行します。 ここでは、既存のサブスクリプションを選択する必要があります。
  3. Visual Studio ウィザードを使用して新しい Azure Functions リソースを作成するか、既存のリソースを使用します。 新しいリソースの場合は、目的のリージョン、ランタイム、一意の識別子に構成する必要があります。
  4. デプロイが完了するまで待機する
  5. 関数 🎉 を実行する

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 のリソースのクリーンアップに関する詳細を確認できます。

次の手順

次のことも実行できます。