ユーザー サインインを使用した Web アプリケーションのセキュリティ保護

以下のガイドは、Web サーバーでホストされ、複数のビジネス シナリオを保持し、Web サーバーにデプロイされるアプリケーションに関するものです。 このアプリケーションは、Microsoft Entra ユーザーにのみ、セキュリティで保護されたリソースを提供する必要があります。 このシナリオの目的は、Microsoft Entra ID に対して Web アプリケーションを認証し、ユーザーに代わって Azure Maps REST API を呼び出せるようにすることです。

Azure portal で Azure Maps アカウントの認証の詳細を表示するには:

  1. Azure portal にサインインします。

  2. Azure portal メニューに移動します。 [すべてのリソース] を選択し、Azure Maps アカウントを選択します。

  3. 左側のペインの [設定] で、 [認証] を選択します。

    Screenshot showing your Azure Maps authentication options in the Azure portal.

Azure Maps アカウントの作成時に、3 つの値が作成されます。 それらは、Azure Maps で次の 2 種類の認証をサポートするために使用されます。

  • Microsoft Entra 認証: Client ID は、REST API 要求に使用されるアカウントを表します。 Client ID 値は、アプリケーション構成に格納してから、Microsoft Entra 認証を使用する Azure Maps HTTP 要求を行う前に取得する必要があります。
  • 共有キー認証: Primary Key および Secondary Key は、共有キー認証のサブスクリプション キーとして使用されます。 共有キー認証は、Azure Maps への各要求で、Azure Maps アカウントによって生成されたキーを渡す処理に依存しています。 キーを定期的に再生成することをお勧めします。 再生成中に現在の接続を維持するために、2 つのキーが用意されています。 1 つのキーを、もう一方を再生成しているときに使用できます。 キーを再生成したら、新しいキーを使用するように、このアカウントにアクセスするすべてのアプリケーションを更新する必要があります。 詳細については、「Azure Maps による認証」を参照してください

Microsoft Entra ID でアプリケーションの登録を作成する

ユーザーがサインインできるよう、Microsoft Entra ID で Web アプリケーションを作成する必要があります。 この Web アプリケーションは、ユーザー アクセスを Azure Maps REST API へ委任します。

  1. Azure portal の Azure サービスの一覧で、[Microsoft Entra ID]>[アプリの登録]>[新規登録] の順に選択します。

    A screenshot showing application registration in Microsoft Entra ID.

  2. [名前] を入力して [サポートされているアカウントの種類] を選択し、リダイレクト URI を指定します。この URL に Microsoft Entra ID がトークンを発行するのであり、マップ コントロールがホストされる URL でもあります。 詳細については、Microsoft Entra ID 「シナリオ: ユーザーをサインインする Web アプリ」を参照してください。 Microsoft Entra シナリオに指定されている手順を完了します。

  3. アプリケーションの登録が完了したら、ユーザーに対してアプリケーション サインインが機能することを確認します。 サインインが機能するなら、アプリケーションに対して、Azure Maps REST API への委任されたアクセスを許可できます。

  4. 委任された API アクセス許可を Azure Maps に割り当てるには、アプリケーションに移動して [API のアクセス許可]>[アクセス許可の追加] を選択します。 [所属する組織で使用している API] の一覧で [Azure Maps] を選択します。

    A screenshot showing add app API permissions.

  5. [Access Azure Maps] (Azure Maps へのアクセス) の横にあるチェック ボックスをオンにしてから、 [アクセス許可の追加] を選択します。

    A screenshot showing select app API permissions.

  6. アプリケーション シークレットを使用してアプリの登録を構成することにより、Web アプリケーションが Azure Maps REST API を呼び出せるようにします。詳細な手順については、「Web API を呼び出す Web アプリ:アプリの登録」の手順に従う必要があります。 ユーザーに代わって Microsoft Entra に対する認証を行うには、シークレットが必要です。 アプリの登録証明書またはシークレットは、Web アプリケーションが Microsoft Entra ID に対する認証のために取得できるように、セキュリティで保護されたストアに格納されている必要があります。

    • アプリケーションに Microsoft Entra アプリの登録とシークレットが既に構成されている場合、この手順はスキップしてかまいません。

    ヒント

    アプリケーションが Azure 環境でホストされている場合は、Azure リソース用マネージド ID と Azure Key Vault インスタンスを使用し、Azure Key Vault シークレットまたは証明書にアクセスするためのアクセス トークンを取得することによりシークレットにアクセスすることをお勧めします。 Azure Key Vault に接続してシークレットを取得するには、マネージド ID を使用した接続のチュートリアルを参照してください。

  7. Azure Maps Web SDK がトークンにアクセスできるように、セキュリティで保護されたトークン エンドポイントを実装します。

    • トークン コントローラーのサンプルについては、Azure Maps の Microsoft Entra ID サンプルを参照してください。
    • AspNetCore 以外の実装などについては、Microsoft Entra ドキュメントの「アプリのトークンを取得する」を参照してください。
    • セキュリティで保護されたトークン エンドポイントは、認証され許可されているユーザーが Azure Maps REST API を呼び出せるように、アクセス トークンを返す役割を担います。
  8. ユーザーまたはグループに対して Azure ロールベースのアクセス制御 (Azure RBAC) を構成するには、「ユーザーにロールベースのアクセス権を付与する」を参照してください。

  9. セキュリティで保護されたトークン エンドポイントにアクセスするため、Azure Maps Web SDK を使用して Web アプリケーション ページを構成します。

var map = new atlas.Map("map", {
        center: [-122.33, 47.64],
        zoom: 12,
        language: "en-US",
        authOptions: {
            authType: "anonymous",
            clientId: "<insert>",  // azure map account client id
            getToken: function (resolve, reject, map) {
                var xhttp = new XMLHttpRequest();
                xhttp.open("GET", "/api/token", true); // the url path maps to the token endpoint.
                xhttp.onreadystatechange = function () {
                    if (this.readyState === 4 && this.status === 200) {
                        resolve(this.responseText);
                    } else if (this.status !== 200) {
                        reject(this.responseText);
                    }
                };

                xhttp.send();
            }
        }
    });
    map.events.add("tokenacquired", function () {
        console.log("token acquired");
    });
    map.events.add("error", function (err) {
        console.log(JSON.stringify(err.error));
    });

Azure Maps に対するロールベースのアクセスをユーザーに許可する

Microsoft Entra グループまたはセキュリティ プリンシパルを 1 つまたは複数の Azure Maps ロール定義に割り当てることで、"Azure ロールベースのアクセス制御 (Azure RBAC)" を許可できます。

Azure Maps で使用できる Azure ロールの定義については、「組み込みの Azure Maps ロールの定義を表示する」のセクションを参照してください。

作成されたマネージド ID またはサービス プリンシパルに、使用可能な Azure Maps ロールを割り当てる方法の詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください

大量のユーザーの Azure Maps アプリとリソース アクセスを効率的に管理するには、「Microsoft Entra グループ」を参照してください。

重要

ユーザーがアプリケーションに対する認証を許可されるようにするには、まずそのユーザーを Microsoft Entra ID に作成する必要があります。 詳細については、Microsoft Entra ID を使用してユーザーを追加または削除するを参照してください。

ユーザーの大規模なディレクトリを効果的に管理する方法については、「Microsoft Entra ID」を参照してください。

警告

Azure Maps の組み込みロールの定義は、多くの Azure Maps REST API に対する非常に大きな承認アクセスを提供します。 API のアクセスを最小限に制限するには、カスタム ロールの定義を作成して、システム割り当て ID をカスタム ロールの定義に割り当てる方法に関する記事を参照してください。 これにより、アプリケーションが Azure Maps にアクセスするために必要な最小限の権限が有効になります。

次のステップ

Web アプリケーション シナリオの理解を深めます。

Azure Maps アカウントにおける API 使用状況メトリックを確認します。

Microsoft Entra ID と Azure Maps を統合する方法を示すサンプルを確認します。