Microsoft Entra ID で保護された Azure 関数アプリ用のコネクターを作成します。

認証に Microsoft Entra ID を使用する Microsoft Power Apps コネクタの重要な原則は、ユーザーがまだアクセス権を持っていないデータへのアクセスをユーザーに提供しないことです。 これは、Microsoft Entra ID–protected サービスへの API 呼び出しが、コネクタへのサインインに使用されるユーザー ID で実行されるためです。 そのため、ターゲット サービスは、認証されたユーザーに対して許可されているものを適用する必要があります。

このチュートリアルでは、Azure Functions を使用して REST API を構築し、Microsoft Entra ID 認証を有効にして、Power Apps で カスタム コネクタ として使用できるようにする方法について説明します。

Visual Studio Code を使用して Azure Functions アプリを作成する

Azure Functions では、ホスティング オプション言語の選択、作成オプション (Azure PortalVisual Studio CodeVisual Studio など) など、検討すべき多数のオプションを使用できます。 このチュートリアルでは、C# と Visual Studio Code を使用します。 このチュートリアルを完了するには、最初に クイック スタート: Visual Studio Code を使用して C# Functions を作成する チュートリアルを完了する必要があります。 Azure で関数アプリを作成するの手順で、関数アプリにつけた名前をメモしておきます。

重要

クイックスタートのリソースのクリーンアップに記載の手順は実行しないでください。 既に行った作業に基づいて手順を進めるため、すべてのリソースをそのまま保持しておく必要があります。

Microsoft Entra ID を使用して Azure 関数アプリへの呼び出しを保護する

  1. Azure ポータル で関数アプリを検索します。 リストで機能アプリの名前を選択します。

    Azure portal の関数アプリの一覧。

  2. プラットフォーム機能 タブを選択します。

    Azure portal の関数アプリ ブレードで強調表示されている「プラットフォーム機能」タブ。

  3. ネットワーク グループの 認証/承認 リンクを選択します。

    Azure portal の関数アプリ ブレードで強調表示されている「認証/承認」リンク。

  4. 認証・認可ブレードで、App Service 認証 トグルを切り替えます。

    Azure ポータルの機能アプリ認証設定で強調表示される App Service 認証のトグル On オプション。

  5. 要求が認証されない場合に実行するアクション ドロップダウンで、値を Azure Active Directory でのログイン に変更します。 この設定により、API に対する匿名要求が許可されなくなります。

    機能アプリの認証設定ブレードの「リクエストが認証されなかった場合の動作」ドロップダウンリストで、「Azure Active Directoryでログイン」オプションが強調表示されるようになりました。

  6. 次に、認証プロバイダーのリストで、Azure Active Directory を選択します。

    関数アプリの認証プロバイダーの一覧で Azure Active Directory が強調表示されている。

  7. Azure Active Directory の設定 ブレードで、管理モード オプションを 簡易 に設定します。 2 つ目の 管理モード オプションを 新しい AD アプリを作成する に設定します。

    Azure ポータルで開いている、関数アプリの Azure Active Directory の設定 ブレード。

    重要

    続行する前に、アプリの作成 フィールドの値をコピーし、後で使用できるようにコピーしてどこかに貼り付けておきます。 この値は、API をセキュリティで保護するために使用する Microsoft Entra ID アプリケーションの名前を表しています。 後でカスタム コネクタを構成するときに、この値を使用します。

  8. OK を選択して、選択を確定します。

  9. 認証/承認 ブレードに戻り、保存 を選択して、関数アプリの認証/承認設定を更新します。

    Azure portal の関数アプリの「認証/承認」ブレードで強調表示されている「保存」ボタン。

  10. 保存後、認証プロバイダー セクションで Azure Active Directory を選択します。

    Azure Active Directory プロバイダー。

  11. Azure AD アプリ を選択し、 クライアント ID の値をコピーして、後で使用できるようにどこかに貼り付けます。

    クライアント ID ページ。

  12. 新しいブラウザー ウィンドウをプライベート モードで開き、API に移動し、API が正しく保護されていることを確認します。 関数アプリの URL は、関数アプリ ブレードの 概要 セクションで確認できます。 認証設定が正しく適用されていれば、Microsoft Entra ID サインイン ページにリダイレクトされます。

    Microsoft Entra ID サインイン ページ。

Azure 関数アプリのカスタム コネクタを作成する

Microsoft Entra ID 認証を使用するカスタム コネクタを作成するには、Microsoft Entra ID アプリの登録を作成してカスタム コネクタをセキュリティで保護し、Microsoft Entra ID を使用して Azure 関数アプリへの呼び出しを保護する セクションで作成した Microsoft Entra ID アプリの登録によって保護された Azure 関数アプリへの委任されたアクセスを取得する必要があります。

Microsoft Entra ID でカスタム コネクタ用のアプリの登録を作成する

まず、カスタム コネクタ用の Microsoft Entra ID アプリケーションを作成します。 これは、カスタム コネクタに Azure 関数アプリを呼び出す権限を与えるために必要となります。

  1. Azure ポータルの アプリの登録 ページに移動します。

    Azure portal の Microsoft Entra ID 登録ページ。

  2. 登録済みアプリケーションの一覧で、新規登録 を選択します。

    新規登録ボタン。

  3. アプリケーションの名前を入力し、サポートされているアカウントの種類とプラットフォーム構成 (オプション) を選択し、登録 を選択します。

    サポートされるアカウントの種類で、「この組織ディレクトリのアカウントのみ」を選択します。 「プラットフォーム構成」で、「Web API」 を選択します。

    注意

    アプリの登録オプションの詳細については、クイック スタート: アプリケーションを Microsoft ID プラットフォームに登録する にアクセスしてください。

  4. 登録を選択すると、アプリの登録API のアクセス許可 が表示されます。

    「API のアクセス許可」画面。

  5. アクセス許可の追加 を選択します。

    アクセス許可の追加ボタン。

  6. 自分の組織が使用している API タブを選択し、Microsoft Entra ID を使用して Azure 関数アプリへの呼び出しを保護する セクションで 手順 7 からアプリ名を検索します。 見つけたら、アプリの名前を選択します。

    重要

    アプリ名は、スクリーンショットに表示されているものとは異なります。

    Azure 関数アプリ名。

  7. user_impersonation チェックボックスをオンにし、アクセス許可の追加 ボタンを選択します。

    user_impersonation アクセス許可の追加。

    注意

    アクセス許可の詳細については、Microsoft ID プラットフォーム エンドポイントでのアクセス許可と同意にアクセスしてください。

  8. 認証とシークレット を選択してから 新しいクライアント シークレット を選択します。

    証明書とシークレット。

  9. シークレットの説明を入力し、有効期限を選択して、追加 を選択します。

    クライアント シークレットの追加。

  10. 新しいシークレットが表示されます。 この値をコピーしてどこかに貼り付けます。 この情報は後で必要になります。

    クライアント シークレット セクションの新しいシークレットを示すスクリーンショット。

  11. 概要を選択し、アプリケーション (クライアント) ID の値をコピーして任意の場所に貼り付けます。 この情報は後で必要になります。

    アプリケーション (クライアント) ID 値を示すスクリーンショット。

後で戻ることができるように、このページを開いたままにしておきます。 Azure portal にはもう 1 つ手順がありますが、最初にカスタム コネクタを作成します。

カスタム コネクタを作成する

Microsoft Entra ID アプリケーションが構成されたので、カスタム コネクタを作成します。 カスタム コネクタを作成するには、接続したい API について記述して、コネクタが API の操作とデータ構造を認識できるようにする必要があります。 カスタム コネクタ用の Azure 関数アプリを作成するときは、多くの場合、次の手順を繰り返して、コネクタを繰り返し作成します:

  1. Visual Studio Code を使用して、Azure 関数アプリをローカルで作成、テスト、デバッグします。
  2. 関数アプリを Azure に展開します。
  3. カスタム コネクタ構成を更新して、関数アプリの変更を反映します。

Postman は、Web API のテストに使用する一般的なツールです。 Azure 関数アプリのテストによく使用されます。 この記事では、Postman コレクションからカスタム コネクタを作成します。 Postman コレクションが用意されています。

注意

独自のコレクションを作成する方法については、カスタム コネクタの Postman コレクションを作成するをご参照ください。 Postman を使用したカスタム コネクタの作成は、1 つのオプションにすぎません。 その他の方法については、API について記述し、カスタム コネクタを定義するをご参照ください。

  1. 新しいブラウザ タブで、Power Apps または Power Automate にログインします。

  2. 次のコードをコピーします。 任意のテキスト エディターを使用して、新しいファイルを作成し、ファイルの内容としてコードを貼り付けます。 ファイルを保存します。 ファイルには任意の名前を付けることができますが、名前を覚えておいてください (例: tutorial-custom-connector.json)。 以降の手順でこのファイルを使用する必要があります。

    {
        "id": "c4b5deba-f97b-47d0-82a5-a2b32561fb01",
        "name": "Custom Connector",
        "description": null,
        "auth": null,
        "events": null,
        "variables": [],
        "order": [
            "374365a1-ede5-4ead-8068-d878085dad26"
        ],
        "folders_order": [],
        "protocolProfileBehavior": {},
        "folders": [],
        "requests": [
            {
                "id": "374365a1-ede5-4ead-8068-d878085dad26",
                "name": "Hello",
                "url": "http://localhost:7071/api/Hello",
                "description": "",
                "data": [],
                "dataOptions": {
                    "raw": {
                        "language": "json"
                    }
                },
                "dataMode": "raw",
                "headerData": [
                    {
                        "key": "Content-Type",
                        "name": "Content-Type",
                        "value": "application/json",
                        "description": "",
                        "type": "text"
                    }
                ],
                "method": "POST",
                "pathVariableData": [],
                "queryParams": [],
                "auth": null,
                "events": null,
                "folder": null,
                "responses": [
                    {
                        "id": "46baba58-7b85-4a2e-8c7d-303080e08ba9",
                        "name": "Hello",
                        "status": null,
                        "mime": null,
                        "language": "plain",
                        "text": "Hello, Marc. This HTTP triggered function executed successfully.",
                        "responseCode": {
                            "code": 200,
                            "name": "OK"
                        },
                        "requestObject": {
                            "data": [],
                            "dataMode": "raw",
                            "dataOptions": {
                                "raw": {
                                    "language": "json"
                                }
                            },
                            "headerData": [
                                {
                                    "key": "Content-Type",
                                    "name": "Content-Type",
                                    "value": "application/json",
                                    "description": "",
                                    "type": "text"
                                }
                            ],
                            "method": "POST",
                            "pathVariableData": [],
                            "queryParams": [],
                            "url": "http://localhost:7071/api/Hello",
                            "rawModeData": "{\n\t\"name\": \"Marc\"\n}"
                        },
                        "headers": [
                            {
                                "key": "Date",
                                "value": "Wed, 04 Mar 2020 22:32:06 GMT"
                            },
                            {
                                "key": "Content-Type",
                                "value": "text/plain; charset=utf-8"
                            },
                            {
                                "key": "Server",
                                "value": "Kestrel"
                            },
                            {
                                "key": "Transfer-Encoding",
                                "value": "chunked"
                            }
                        ],
                        "cookies": null,
                        "request": "374365a1-ede5-4ead-8068-d878085dad26",
                        "collection": "c4b5deba-f97b-47d0-82a5-a2b32561fb01"
                    }
                ],
                "rawModeData": "{\n\t\"name\": \"Marc\"\n}",
                "headers": "Content-Type: application/json\n",
                "pathVariables": {}
            }
        ]
    }
    
  3. 左側のペインで データを展開し、カスタム コネクタを選択します。

    左側ウィンドウでデータとカスタム コネクタを示すスクリーンショット。

  4. 右上隅のカスタム コネクタの新規作成を選択し、Postman コレクションをインポートを選択します。

    Postman コレクションをインポートします。

  5. コネクタの名前を入力します。インポート を選択し、手順 2 で作成したファイルを参照して、続行 を選択します。

    名前とファイルの場所。

  6. 全般ページが開きます。 スキームHTTPS に変更し、ホスト の値を関数アプリのドメインに置き換えて、ウィザードを セキュリティ ページに進みます。

    全般情報の設定。

  7. セキュリティ ページで、アプリケーションの Microsoft Entra ID 情報を指定します:

    OAuth 設定。

    セキュリティ情報の入力後は、コネクタの更新 を選択してカスタム コネクタを作成します。

  8. セキュリティ ページで、リダイレクト URL フィールドが入力されました。 この URL をコピーして、このチュートリアルの次のセクションで使用できるようにします。

    注意

    リダイレクト URL を表示にあたっては、下方向へのスクロールが必要な場合があります。

    リダイレクト U R L フィールドを示すスクリーンショット。

  9. 別のブラウザー タブで、Microsoft Entra ID でカスタム コネクタ用のアプリの登録を作成する セクションで作成したアプリの登録に戻ります。 概要セクションが表示されていることを確認し、リダイレクト URI を追加するを選択します。

    リダイレクト U R I ボタンの追加を示すスクリーンショット。

  10. プラットフォームの追加 を選択します。

    プラットフォームの追加ボタン。

  11. プラットフォームの構成ウィンドウで、Web を選択します。

    プラットフォームの構成ウィンドウに Web を表示するスクリーンショット。

  12. Web の構成ウィンドウで、手順 7リダイレクト URL の値を貼り付け、構成ボタンを選択します。

    Web の構成ウィンドウを示すスクリーンショット。

  13. カスタム コネクタ構成を含むブラウザーのタブに戻ります。 ウィザードの セキュリティ ページが表示されています。

  14. 定義という単語を選択して、ウィザードの定義ページに進み、確認します。

    定義ボタンを示すスクリーンショット。

    注意

    定義は、インポートした Postman コレクションから取得されます。 クイック スタート: Visual Studio Code を使用して Azure で C# 関数を作成する チュートリアルのコードを変更した場合は、インポート ファイルが API のシェイプと一致しない場合があります。 新しい Postman コレクションを作成するか、カスタム コネクタのアクションを手動で調整する必要があります。 新しい Postman コレクションを作成するには、このチュートリアルのこちらで既に紹介したリンクを参照してください。 アクションを手動で調整するには、カスタム コネクタを一から作成するコネクタの定義を作成するをご覧ください。

コネクタをテストする

コネクタの作成が完了したので、テストして、正常に機能することを確認します。 テストは現在、Power Automate と Power Apps でのみ使用可能です。

  1. テストという単語を選択して、ウィザードのテスト ページに進みます。

    テスト ページ。

  2. テスト ページで、新規接続を選択します。

    新しい接続ボタンを示すスクリーンショット。

  3. 作成 を選択してから、自分の Microsoft Entra ID ユーザーでサインインします。

    作成ボタンとサインイン画面を示すスクリーンショット。

  4. テスト ページに戻り、次のいずれかを実行します:

    • Power Automate で、テスト ページに戻ります。 更新アイコンを選択して、接続情報が更新されることを確認します。

      接続の更新。

    • Power Apps で、現在の環境で使用できる接続のリストに移動します。 左側のウィンドウで、カスタム コネクタを選択します。 カスタム コネクタを検索し、編集アイコンを選択します。

      カスタム コネクタの一覧を示すスクリーンショット。

  5. テスト ページに戻り、名前フィールドに値を入力してから、テスト操作を選択します。

    操作のテスト。

  6. 要求応答を確認します。

    Url、Method、Headers、Body のリクエスト フィールドを示すスクリーンショット。

    Status、Header、Body の応答フィールドが表示された画面。

次の手順

カスタム コネクタを作成し、その動作を定義したので、コネクタを使用できます。

フィードバックを提供する

コネクタ プラットフォームの問題点や新機能のアイデアなどのフィードバックをお待ちしています。 フィードバックを提供するには、「問題を送信するか、コネクタに関するヘルプを入手する」にアクセスし、フィードバックの種類を選択します。