Azure Logic Apps からカスタム API を呼び出すときに認証を追加する

API の呼び出しのセキュリティを強化するために、コードを更新する必要がないように、Azure portal を使用して Microsoft Entra 認証を設定できます。 あるいは、API のコードで認証を要求し、強制できます。

次の方法で認証を追加できます。

  • コードを変更しない: Azure portal を使用して Microsoft Entra ID を使用して API 保護するため、コードを更新したり、API を再デプロイしたりする必要はありません。

    Note

    既定では、Azure portal で選択した Microsoft Entra 認証では、きめ細かな承認は提供されません。 たとえば、この認証は、特定のユーザーやアプリではなく、特定のテナントに API を制限します。

  • API のコードを更新する: コードを使用して証明書認証、基本認証または Microsoft Entra 認証を適用して API を保護します。

コードを変更せず、API の呼び出しを認証する

この方法の一般的な手順を次に示します。

  1. 2 つの Microsoft Entra アプリケーション ID を作成します。1 つはロジック アプリ リソース用、1 つは Web アプリ (または API アプリ) 用です。

  2. API の呼び出しを認証するには、ロジック アプリの Microsoft Entra アプリケーション ID に関連付けられているサービス プリンシパルの資格情報 (クライアント ID とシークレット) を使用します。

  3. アプリケーション ID をロジック アプリのワークフロー定義に含めます。

パート 1: ロジック アプリの Microsoft Entra アプリケーション ID を作成する

ロジック アプリ リソースでは、この Microsoft Entra アプリケーション ID を使用して、Microsoft Entra ID に対する認証を行います。 この ID は、ディレクトリに対して一度だけ設定します。 たとえば、ロジック アプリごとに一意の ID を作成できますが、すべてのロジック アプリに同じ ID を使用することを選択できます。 これらの ID は Azure ポータルまたは PowerShell を使用して設定できます。

  1. Azure portal で、[Microsoft Entra ID] を選びます。

  2. Web アプリまたは API アプリと同じディレクトリにいることを確認します。

    ヒント

    ディレクトリを切り替えるには、プロファイルを選択し、別のディレクトリを選択します。 あるいは、[概要]>[ディレクトリの切り替え] の順に選択します。

  3. ディレクトリ メニューの [管理] で、[アプリの登録]>[新しい登録] の順に選択します。

    [すべての登録] 一覧にはディレクトリのすべてのアプリ登録が表示されます。 自分のアプリ登録のみを表示するには、[所有しているアプリケーション] を選択します。

    Screenshot showing Azure portal with Microsoft Entra instance,

  4. ロジック アプリのアプリケーション ID のユーザー向けの名前を指定します。 [サポートされているアカウントの種類] を選択します。 [リダイレクト URI][Web] を選択し、認証応答を返す一意の URL を指定して、[登録] を選択します。

    Screenshot showing

    [所有しているアプリケーション] 一覧に、作成したアプリケーション ID が含められるようになりました。 この ID が表示されない場合は、ツール バーの [更新] を選択します。

    Screenshot showing the application identity for your logic app.

  5. アプリ登録一覧で、新しいアプリケーション ID を選択します。

  6. アプリケーション ID ナビゲーション メニューから、[概要] を選択します。

  7. [概要] ペインの [Essentials] で、アプリケーション ID をコピーして保存し、パート 3 でロジック アプリの "クライアント ID" として使用します。

    Screenshot showing the application (client) ID underlined.

  8. アプリケーション ID ナビゲーション メニューから、証明書とシークレットを選択 します

  9. [クライアント シークレット] タブで、[新しいクライアント シークレット] を選択します。

  10. [説明] にシークレットの名前を入力します。 [有効期限] で、シークレットの期間を選択します。 終了したら、 [追加] を選択します。

    作成するシークレットは、アプリケーション ID の "シークレット" またはロジック アプリのパスワードとして機能します。

    Screenshot showing secret creation for application identity.

    [証明書とシークレット] ウィンドウの [クライアント シークレット] に、シークレットの値とシークレット ID が表示されるようになりました。

    Screenshot showing secret value and secret ID with copy button for secret value selected.

  11. 後で使用するためにシークレット値をコピーします。 パート 3 でロジック アプリを構成するとき、この値を "シークレット" またはパスワードとして指定します。

パート 2: Web アプリまたは API アプリの Microsoft Entra アプリケーション ID を作成する

Web アプリまたは API アプリが既にデプロイされている場合、Azure ポータルで認証をオンにし、アプリケーション ID を作成できます。 デプロイされていない場合、Resource Manager テンプレートでデプロイするときに認証をオンにできます

Azure portal でデプロイされた Web アプリまたは API アプリのアプリケーション ID を作成する

  1. Azure portal で、Web アプリまたは API アプリを探して選択します。

  2. [設定] で、[認証]>[ID プロバイダーの追加] を選択します。

  3. [ID プロバイダーの追加] ウィンドウが開いたら、[基本] タブの ID プロバイダー一覧から Microsoft を選択して Microsoft Entra ID を使用し、[追加] を選択します。

  4. その後、次のようにして Web アプリまたは API アプリのアプリケーション ID を作成します。

    1. [アプリの登録の種類] で、[新しいアプリの登録を作成する] を選択します。

    2. [名前] には、アプリケーション ID の名前を指定します。

    3. [サポートされているアカウントの種類] で、シナリオに適したアカウントの種類を選択します。

    4. [アクセスの制限] で、[認証が必要] を選びます。

    5. [認証されていない要求] で、シナリオに基づいてオプションを選択します。

    6. 終了したら、 [追加] を選択します。

    Web アプリまたは API アプリ用に作成したアプリケーション ID が、[ID プロバイダー] セクションに表示されるようになりました。

    Screenshot showing newly created application identity for web app or API app.

    ヒント

    アプリケーション ID が表示されない場合は、ツールバーの [更新] を選択します。

次に、Web アプリまたは API アプリ用に作成したアプリケーション ID のアプリケーション (クライアント) ID とテナント ID を見つける必要があります。 ID はパート 3 で使用します。 そのため、Azure portal で次の手順に進みます。

Azure ポータルで、Web アプリまたは API アプリのアプリケーション ID のクライアント ID とテナント ID を見つける

  1. Web アプリのナビゲーション メニューで、[認証] を選択します。

  2. [ID プロバイダー] セクションで、前に作成したアプリケーション ID を見つけます。 アプリケーション ID の名前を選択します。

    Screenshot showing newly created application identity with 'Overview' pane open.

  3. アプリケーション ID の [概要] ペインが開いたら、[アプリケーション (クライアント) ID][ディレクトリ (テナント) ID] の値を見つけます。 パート 3 で使用する値をコピーして保存します。

    Screenshot showing application identity's 'Overview' pane open with 'Application (client) ID' value and 'Directory (tenant) ID' value underlined.

    必要であれば、Web アプリまたは API アプリのデプロイ テンプレートでもテナント ID GUID を使用できます。 この GUID は特定のテナントの GUID ("テナント ID") であり、URL (https://sts.windows.net/{GUID}) に表示されます。

Azure Resource Manager テンプレートでデプロイするときに認証を設定する

Azure Resource Manager テンプレート (ARM テンプレート) を使用している場合でも、ロジック アプリのアプリ ID とは異なる Web アプリまたは API アプリの Microsoft Entra アプリケーション ID を作成する必要があります。 アプリケーション ID を作成し、クライアント ID とテナント ID を見つけるには、Azure portal のパート 2 の前の手順に従います。 アプリのデプロイ テンプレートとパート 3 でも、クライアント ID とテナント ID の両方を使用します。

重要

Web アプリまたは API アプリの Microsoft Entra アプリケーション ID を作成するときは、PowerShell ではなく Azure portal を使用する必要があります。 PowerShell コマンドレットでは、ユーザーが Web サイトにサインインするために必要なアクセス許可が設定されません。

クライアント ID とテナント ID を取得したら、ID を Web アプリまたは API アプリのサブ リソースとしてデプロイ テンプレートに追加します。

"resources": [
   {
      "apiVersion": "2015-08-01",
      "name": "web",
      "type": "config",
      "dependsOn": ["[concat('Microsoft.Web/sites/','parameters('webAppName'))]"],
      "properties": {
         "siteAuthEnabled": true,
         "siteAuthSettings": {
            "clientId": "<client-ID>",
            "issuer": "https://sts.windows.net/<tenant-ID>/"
         }
      }
   }
]

空の Web アプリとロジック アプリを Microsoft Entra 認証と共に自動的にデプロイするには、 ここで完全なテンプレートを表示するか、次の [Azure へのデプロイ] ボタンを選択します。

Deploy to Azure

パート 3: ロジック アプリの承認セクションを入力する

先ほどのテンプレートではこの認可セクションが既に設定されていますが、ロジック アプリ定義を直接作成する場合、認可セクション全体を含める必要があります。

  1. ロジック アプリ定義をコード ビューで開きます。

  2. HTTP アクション定義に移動し、[認可] セクションを見つけて、次のプロパティを含めます。

{
   "tenant": "<tenant-ID>",
   "audience": "<client-ID-from-Part-2-web-app-or-API app>",
   "clientId": "<client-ID-from-Part-1-logic-app>",
   "secret": "<secret-from-Part-1-logic-app>",
   "type": "ActiveDirectoryOAuth"
}
プロパティ Required Description
tenant はい Microsoft Entra テナントの GUID
audience はい アクセスするターゲット リソースの GUID。Web アプリまたは API アプリのアプリケーション ID からのクライアント ID です
clientId はい アクセスを要求するクライアントの GUID。ロジック アプリのアプリケーション ID からのクライアント ID です
secret はい アクセス トークンを要求しているクライアントのアプリケーション ID からのシークレットまたはパスワード
type はい 認証の種類。 ActiveDirectoryOAuth 認証の場合、値 ActiveDirectoryOAuthを使用します。

次に例を示します。

{
   "actions": {
      "HTTP": {
         "inputs": {
            "method": "POST",
            "uri": "https://your-api-azurewebsites.net/api/your-method",
            "authentication": {
               "tenant": "tenant-ID",
               "audience": "client-ID-from-azure-ad-app-for-web-app-or-api-app",
               "clientId": "client-ID-from-azure-ad-app-for-logic-app",
               "secret": "key-from-azure-ad-app-for-logic-app",
               "type": "ActiveDirectoryOAuth"
            }
         }
      }
   }
}

コードを利用して API 呼び出しを保護する

証明書の認証

ロジック アプリ ワークフローから Web アプリまたは API アプリに入ってくる要求を検証するために、クライアント証明書を利用できます。 コードの設定方法については、「Web アプリの TLS 相互認証を構成する方法」を参照してください。

[認可] セクションで、次のプロパティを含めます。

{
   "type": "ClientCertificate",
   "password": "<password>",
   "pfx": "<long-pfx-key>"
}
プロパティ Required Description
type はい 認証の種類。 TLS/SSL クライアント証明書の場合、値として ClientCertificate を指定する必要があります。
password いいえ クライアント証明書 (PFX ファイル) にアクセスするためのパスワード
pfx はい Base64 でエンコードされた、クライアント証明書のコンテンツ (PFX ファイル)

[基本認証]

ロジック アプリから Web アプリまたは API アプリに入ってくる要求を検証するために、ユーザー名やパスワードなど、基本認証を利用できます。 基本認証は一般的なパターンなので、この認証は Web アプリまたは API アプリの作成にどの言語が使われていても使用できます。

[認可] セクションで、次のプロパティを含めます。

{
   "type": "Basic",
   "username": "<username>",
   "password": "<password>"
}
プロパティ Required Description
type はい 使用する認証の種類。 基本認証の場合、値 Basic を使用する必要があります。
username はい 認証に使用するユーザー名
password はい 認証に使用するパスワード

コードによる Microsoft Entra 認証

既定では、Azure portal で有効にする Microsoft Entra 認証では、きめ細かい承認は提供されません。 たとえば、この認証は、特定のユーザーやアプリではなく、特定のテナントに API を制限します。

コードを利用し、ロジック アプリへの API アクセスを制限するには、JSON Web トークン (JWT) が含まれるヘッダーを抽出します。 呼び出し元の ID を確認し、一致しない要求を拒否します。

次のステップ