Azure Logic Apps からカスタム API を呼び出すときに認証を追加する
API の呼び出しのセキュリティを強化するには、Azure portal で Microsoft Entra 認証を設定できるので、コードを更新する必要はありません。 あるいは、API のコードで認証を要求し、強制できます。
次の方法で認証を追加できます。
コードを変更しない: Azure ポータルで Microsoft Entra ID を使って API を保護するので、コードの更新や、API の再デプロイの必要がありません。
Note
既定では、Azure portal で Microsoft Entra 認証を選んでも、きめ細かい認可は提供されません。 たとえば、この認証は、特定のユーザーやアプリではなく、特定のテナントに API を制限します。
API のコードを更新する: コードで証明書認証、基本認証、または Microsoft Entra 認証を適用して API を保護します。
コードを変更せず、API の呼び出しを認証する
この方法の一般的な手順を次に示します。
2 つの Microsoft Entra アプリケーション ID を作成します。ロジック アプリ リソース用に 1 つ、Web アプリ (または API アプリ) 用に 1 つです。
API の呼び出しを認証するには、ロジック アプリの Microsoft Entra アプリケーション ID に関連付けられているサービス プリンシパルの資格情報 (クライアント ID とシークレット) を使います。
アプリケーション ID をロジック アプリのワークフロー定義に含めます。
パート 1: ロジック アプリの Microsoft Entra アプリケーション ID を作成する
ロジック アプリ リソースはこの Microsoft Entra アプリケーション ID を使って、Microsoft Entra ID に対する認証を行います。 この ID は、ディレクトリに対して一度だけ設定します。 たとえば、ロジック アプリごとに一意の ID を作成できますが、すべてのロジック アプリに同じ ID を使用することを選択できます。 これらの ID は Azure ポータルまたは PowerShell を使用して設定できます。
Azure portal で、[Microsoft Entra ID] を選びます。
Web アプリまたは API アプリと同じディレクトリにいることを確認します。
ヒント
ディレクトリを切り替えるには、プロファイルを選択し、別のディレクトリを選択します。 あるいは、[概要]>[ディレクトリの切り替え] の順に選択します。
ディレクトリ メニューの [管理] で、[アプリの登録]>[新しい登録] の順に選択します。
[すべての登録] 一覧にはディレクトリのすべてのアプリ登録が表示されます。 自分のアプリ登録のみを表示するには、[所有しているアプリケーション] を選択します。
ロジック アプリのアプリケーション ID のユーザー向けの名前を指定します。 [サポートされているアカウントの種類] を選択します。 [リダイレクト URI] で [Web] を選択し、認証応答を返す一意の URL を指定して、[登録] を選択します。
[所有しているアプリケーション] 一覧に、作成したアプリケーション ID が含められるようになりました。 この ID が表示されない場合は、ツール バーの [更新] を選択します。
アプリ登録一覧で、新しいアプリケーション ID を選択します。
アプリケーション ID ナビゲーション メニューから、[概要] を選択します。
[概要] ペインの [Essentials] で、アプリケーション ID をコピーして保存し、パート 3 でロジック アプリの "クライアント ID" として使用します。
アプリケーション ID ナビゲーション メニューから、[証明書とシークレット] を選びます。
[クライアント シークレット] タブで、[新しいクライアント シークレット] を選択します。
[説明] にシークレットの名前を入力します。 [有効期限] で、シークレットの期間を選択します。 終了したら、 [追加] を選択します。
作成するシークレットは、アプリケーション ID の "シークレット" またはロジック アプリのパスワードとして機能します。
[証明書とシークレット] ペインの [クライアント シークレット] に、シークレットがシークレット値とシークレット ID と共に表示されるようになります。
後で使用するためにシークレット値をコピーします。 パート 3 でロジック アプリを構成するとき、この値を "シークレット" またはパスワードとして指定します。
パート 2: Web アプリまたは API アプリの Microsoft Entra アプリケーション ID を作成する
Web アプリまたは API アプリが既にデプロイされている場合、Azure ポータルで認証をオンにし、アプリケーション ID を作成できます。 デプロイされていない場合、Resource Manager テンプレートでデプロイするときに認証をオンにできます。
Azure portal でデプロイされた Web アプリまたは API アプリのアプリケーション ID を作成する
Azure portal で、Web アプリまたは API アプリを探して選択します。
[設定] で、[認証]>[ID プロバイダーの追加] を選択します。
[ID プロバイダーの追加] ペインが開いたら、[基本] タブの [ID プロバイダー] の一覧から [Microsoft] を選んで Microsoft Entra ID を使用し、[追加] を選びます。
その後、次のようにして Web アプリまたは API アプリのアプリケーション ID を作成します。
[アプリの登録の種類] で、[新しいアプリの登録を作成する] を選択します。
[名前] には、アプリケーション ID の名前を指定します。
[サポートされているアカウントの種類] で、シナリオに適したアカウントの種類を選択します。
[アクセスの制限] で、[認証が必要] を選びます。
[認証されていない要求] で、シナリオに基づいてオプションを選択します。
終了したら、 [追加] を選択します。
Web アプリまたは API アプリ用に作成したアプリケーション ID が、[ID プロバイダー] セクションに表示されるようになりました。
ヒント
アプリケーション ID が表示されない場合は、ツールバーの [更新] を選択します。
次に、Web アプリまたは API アプリ用に作成したアプリケーション ID のアプリケーション (クライアント) ID とテナント ID を見つける必要があります。 ID はパート 3 で使用します。 そのため、Azure portal で次の手順に進みます。
Azure ポータルで、Web アプリまたは API アプリのアプリケーション ID のクライアント ID とテナント ID を見つける
Web アプリのナビゲーション メニューで、[認証] を選択します。
[ID プロバイダー] セクションで、前に作成したアプリケーション ID を見つけます。 アプリケーション ID の名前を選択します。
アプリケーション ID の [概要] ペインが開いたら、[アプリケーション (クライアント) ID] と [ディレクトリ (テナント) ID] の値を見つけます。 パート 3 で使用する値をコピーして保存します。
必要であれば、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 ポータルを使う必要があります。 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>/"
}
}
}
]
Microsoft Entra 認証と共に、空の Web アプリやロジック アプリを自動的にデプロイするには、こちらで完全なテンプレートを確認するか、次の [Azure にデプロイ] ボタンを選びます。
パート 3: ロジック アプリの承認セクションを入力する
先ほどのテンプレートではこの認可セクションが既に設定されていますが、ロジック アプリ定義を直接作成する場合、認可セクション全体を含める必要があります。
ロジック アプリ定義をコード ビューで開きます。
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 を確認し、一致しない要求を拒否します。