次の方法で共有


Azure Functions を使用して認証サービスを構築する

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

Important

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

この記事では、次の方法について説明します。

  • 関数を設定します。
  • アクセス トークンを生成します。
  • 関数をテストします。
  • 関数をデプロイして実行します。

コードをダウンロード

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

Prerequisites

Overview

信頼されたサービス アーキテクチャを示す図。

このチュートリアルでは、信頼されたトークン プロビジョニング サービスとして機能する関数アプリを作成します。 このチュートリアルを使用して、独自のトークン プロビジョニング サービスをブートストラップできます。

このサービスは、Communication Services に対するユーザーの認証を担当します。 Communication Services アプリケーションのユーザーは、チャット スレッドと VoIP 呼び出しに参加するためにアクセス トークンが必要です。 この関数は、ユーザーと Communication Services の間で信頼できる仲介者として機能します。 リソース接続文字列をユーザーに公開することなく、アクセス トークンをプロビジョニングできます。

詳細については、 クライアントとサーバーのアーキテクチャ認証と承認 の概念に関するドキュメントを参照してください。

関数を設定する

このセクションでは、関数を設定する手順について説明します。

Azure Functions のセットアップ

まず、関数の基本構造を設定します。 セットアップの詳細な手順については、「 クイック スタート: Visual Studio Code を使用して Azure で C# 関数を作成する」を参照してください。

この関数には、次の構成が必要です。

  • 言語: JavaScript
  • テンプレート: HTTP トリガー
  • 承認レベル: 匿名 (別の承認モデルを使用する場合は、後で切り替えることができます)
  • 関数名: ユーザー定義

「クイック スタート: 上記の構成で Visual Studio Code を使用して Azure で C# 関数を作成する」の手順に従った後、関数自体を含むindex.js ファイルを含む関数のプロジェクトが Visual Studio Code に存在する必要があります。 ファイル内の次のコードは次のようになります。


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
    };
}

次の手順では、Communication Services ライブラリをインストールします。

Communication Services ライブラリをインストールする

Identity ライブラリを使用して、ユーザー アクセス トークンを生成します。

npm install コマンドを使用して、Communication Services Identity SDK for JavaScript をインストールします。


npm install @azure/communication-identity --save

--save オプションを使用すると、package.json ファイル内の依存関係としてライブラリが表示されます。

index.js ファイルの先頭で、CommunicationIdentityClient パラメーターのインターフェイスをインポートします。

const { CommunicationIdentityClient } = require('@azure/communication-identity');

アクセス トークンを生成する

関数でユーザー アクセス トークンを生成できるようにするには、まず Communication Services リソースの接続文字列を使用する必要があります。

接続文字列を取得する方法の詳細については、「 クイック スタート: Communication Services リソースの作成と管理」を参照してください。

const connectionString = 'INSERT YOUR RESOURCE CONNECTION STRING'

次に、元の関数を変更してユーザー アクセス トークンを生成します。

ユーザー アクセス トークンを生成するには、 createUser メソッドを使用してユーザーを作成します。 ユーザーが作成されたら、 getToken メソッドを使用して、関数から返されるそのユーザーのトークンを生成します。

この例では、 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 パラメーターの場合は、作成手順をスキップしてアクセス トークンを生成できます。 詳細については、アクセス トークンの作成と管理に関する記事を参照してください。

関数をテストする

F5を使用して関数をローカルで実行します。 このアクションは、関数をローカルで初期化し、 http://localhost:7071/api/FUNCTION_NAMEを介してアクセスできるようにします。 ローカルでの実行の詳細については、「 クイック スタート: Visual Studio Code を使用して Azure で C# 関数を作成する」を参照してください。

ブラウザーで URL を開くと、通信ユーザー ID、トークン、トークンの有効期限を含む応答本文が表示されます。

作成された関数の応答の例を示すスクリーンショット。

関数を Azure にデプロイする

関数をデプロイするには、「 クイック スタート: Visual Studio Code を使用して Azure で C# 関数を作成する」の手順に従います。

まとめると、次の作業が必要です。

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

関数を実行する

URL http://<function-appn-ame>.azurewebsites.net/api/<function-name>を使用して関数を実行します。

URL を見つけるには、Visual Studio Code で関数を右クリックし、関数の URL をコピーします。

関数を実行する方法の詳細については、「 クイック スタート: Visual Studio Code を使用して Azure で C# 関数を作成する」を参照してください。

エンドポイントをセキュリティで保護する

ユーザーにアクセス トークンを提供するように信頼されたサービスを設定する一環として、そのエンドポイントのセキュリティを考慮して、サービスのトークンをランダムに作成できる悪いアクターがないようにする必要があります。 Azure Functions には、さまざまな種類の認証ポリシーを使用してエンドポイントをセキュリティで保護するために使用できる組み込みのセキュリティ機能が用意されています。 詳細については、 Azure Functions のセキュリティに関するページを参照してください。

リソースをクリーンアップする

Azure Communication Services サブスクリプションをクリーンアップして削除したい場合は、リソースまたはリソース グループを削除できます。 リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。 Communication Service リソースをクリーンアップし、Azure Functions リソースをクリーンアップする方法の詳細を確認できます。