從 Azure Logic Apps 呼叫自定義 API 時新增驗證

若要改善對 API 呼叫的安全性,您可以透過 Azure 入口網站 設定 Microsoft Entra 驗證,因此您不需要更新程式碼。 或者,您可以透過 API 的程式碼要求並強制執行驗證。

您可以透過下列方式新增驗證:

驗證對 API 的呼叫,而不變更程式碼

以下是此方法的一般步驟:

  1. 建立兩個 Microsoft Entra 應用程式身分識別:一個用於邏輯應用程式資源,另一個用於 Web 應用程式(或 API 應用程式)。

  2. 若要驗證對 API 的呼叫,請使用與邏輯應用程式之 Microsoft Entra 應用程式身分識別相關聯的服務主體認證(用戶端識別符和密碼)。

  3. 在邏輯應用程式的工作流程定義中包含應用程式標識碼。

第 1 部分:為您的邏輯應用程式建立 Microsoft Entra 應用程式識別

邏輯應用程式資源會使用此 Microsoft Entra 應用程式身分識別來驗證 Microsoft Entra 識別符。 您只需要為您的目錄設定此身分識別一次。 例如,您可以選擇對所有邏輯應用程式使用相同的身分識別,即使您可以為每個邏輯應用程式建立唯一的身分識別也一樣。 您可以在 Azure 入口網站 中設定這些身分識別,或使用PowerShell

  1. Azure 入口網站 中,選取 [Microsoft Entra ID]。

  2. 確認您位於與 Web 應用程式或 API 應用程式相同的目錄中。

    提示

    若要切換目錄,請選擇您的設定檔,然後選取另一個目錄。 或者,選取 [概觀>切換目錄]。

  3. 在目錄功能表上的 [管理] 底下,選取 [應用程式註冊>[新增註冊]。

    [ 所有註冊] 列表會顯示目錄中的所有應用程式註冊。 若要只檢視您的應用程式註冊,請選取 [ 擁有的應用程式]。

    Screenshot showing Azure portal with Microsoft Entra instance,

  4. 提供邏輯應用程式應用程式身分識別的使用者面向名稱。 選取支持的帳戶類型。 針對 [ 重新導向 URI],選取 [Web],提供可傳回驗證回應的唯一 URL,然後選取 [ 註冊]。

    Screenshot showing

    [ 擁有的應用程式 ] 列表現在包含您建立的應用程式身分識別。 如果此身分識別未出現,請在工具列上選取 [ 重新整理]。

    Screenshot showing the application identity for your logic app.

  5. 從應用程式註冊清單中,選取新的應用程式身分識別。

  6. 從應用程式身分識別導覽功能表中,選取 [ 概觀]。

  7. 在 [概觀] 窗格的 [基本資訊] 底下,複製應用程式標識符,並將它儲存為第 3 部分中邏輯應用程式的「用戶端識別符」。

    Screenshot showing the application (client) ID underlined.

  8. 從應用程式身分識別導覽功能表中,選取 [ 憑證和秘密]。

  9. 在 [ 客戶端密碼] 索引標籤上 ,選取 [ 新增客戶端密碼]。

  10. 針對 [描述],提供秘密的名稱。 在 [到期日]下,選取秘密的持續時間。 完成時,請選取 [ 新增]。

    您建立的秘密可作為邏輯應用程式的「秘密」或密碼。

    Screenshot showing secret creation for application identity.

    在 [憑證與秘密] 窗格的 [客戶端密碼] 底下,您的秘密現在會連同秘密值和秘密標識碼一起顯示。

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

  11. 複製秘密值以供稍後使用。 當您在第 3 部分設定邏輯應用程式時,請將此值指定為「秘密」或密碼。

第 2 部分:為您的 Web 應用程式或 API 應用程式建立 Microsoft Entra 應用程式身分識別

如果您的 Web 應用程式或 API 應用程式已部署,您可以開啟驗證,並在 Azure 入口網站 中建立應用程式身分識別。 否則,您可以使用 Azure Resource Manager 範本部署時開啟驗證。

在 Azure 入口網站 中建立已部署 Web 應用程式或 API 應用程式的應用程式身分識別

  1. 在 Azure 入口網站,尋找並選取您的 Web 應用程式或 API 應用程式。

  2. 在 [設定] 底,選取 [驗證>新增識別提供者]。

  3. 在 [新增識別提供者] 窗格開啟之後,在 [基本] 索引卷標的 [識別提供者] 清單中,選取 [Microsoft] 以使用 Microsoft Entra 身分識別,然後選取 [新增]。

  4. 現在,為 Web 應用程式或 API 應用程式建立應用程式身分識別,如下所示:

    1. 針對 [ 應用程式註冊類型],選取 [ 建立新的應用程式註冊]。

    2. 針對 [ 名稱],提供應用程式身分識別的名稱。

    3. 針對 支持的帳戶類型,選取適合您案例的帳戶類型。

    4. 針對 [ 限制存取],選取 [ 需要驗證]。

    5. 針對 [未驗證的要求],根據您的案例選取選項。

    6. 完成時,請選取 [ 新增]。

    您剛才為 Web 應用程式或 API 應用程式建立的應用程式身分識別現在會出現在 [識別提供者 ] 區段中:

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

    提示

    如果應用程式身分識別未出現,請在工具列上選取 [ 重新整理]。

現在,您必須找到您剛為 Web 應用程式或 API 應用程式建立的應用程式身分識別的應用程式識別碼(用戶端)識別碼和租使用者識別碼。 您在第 3 部分中使用這些識別碼。 因此,請繼續進行下列 Azure 入口網站 步驟。

在 Azure 入口網站 中尋找 Web 應用程式或 API 應用程式的應用程式用戶端識別碼和租使用者識別碼

  1. 在 Web 應用程式的導覽選單上,選取 [ 驗證]。

  2. 在 [ 識別提供者 ] 區段中,尋找您先前建立的應用程式身分識別。 選取應用程式身分識別的名稱。

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

  3. 在應用程式身分識別的 [概觀] 窗格開啟之後,尋找 [應用程式] [用戶端] 識別碼[目錄] 識別碼的值。 複製並儲存值以供第 3 部分使用。

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

    如有必要,您也可以在 Web 應用程式或 API 應用程式的部署範本中使用租使用者識別碼 GUID。 此 GUID 是您特定租使用者的 GUID (「租使用者識別碼」),應該會出現在此 URL 中: https://sts.windows.net/{GUID}

使用 Azure Resource Manager 範本部署時設定驗證

如果您使用 Azure Resource Manager 範本 (ARM 範本),您仍然需要為 Web 應用程式或 API 應用程式建立 Microsoft Entra 應用程式身分識別,其與邏輯應用程式的應用程式身分識別不同。 若要建立應用程式身分識別,然後尋找用戶端標識碼和租使用者標識符,請遵循第2部分中的先前步驟來取得 Azure 入口網站。 您將在應用程式的部署範本中使用用戶端識別碼和租使用者識別碼,以及第 3 部分。

重要

當您為 Web 應用程式或 API 應用程式建立 Microsoft Entra 應用程式身分識別時,您必須使用 Azure 入口網站,而不是 PowerShell。 PowerShell Commandlet 不會設定將使用者登入網站所需的許可權。

取得用戶端識別碼和租使用者識別碼之後,請在部署範本中包含這些識別碼作為 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"
}
屬性 必要 描述:
tenant Yes Microsoft Entra 租使用者的 GUID
audience Yes 您想要存取之目標資源的 GUID,這是來自 Web 應用程式或 API 應用程式之應用程式身分識別的用戶端識別碼
clientId Yes 要求存取之用戶端的 GUID,這是邏輯應用程式的應用程式身分識別中的用戶端識別碼
secret Yes 要求存取令牌之用戶端的應用程式身分識別密碼或密碼
type Yes 驗證類型。 針對 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 應用程式的連入要求,您可以使用用戶端憑證。 若要設定程式代碼,請瞭解如何 設定 TLS 相互驗證

在 [授權]段中,包含下列屬性:

{
   "type": "ClientCertificate",
   "password": "<password>",
   "pfx": "<long-pfx-key>"
}
屬性 必要 描述:
type Yes 驗證類型。 針對 TLS/SSL 用戶端憑證,此值必須是 ClientCertificate
password No 存取客戶端憑證的密碼 (PFX 檔案)
pfx Yes 用戶端憑證的base64編碼內容 (PFX 檔案)

基本驗證

若要驗證邏輯應用程式到 Web 應用程式或 API 應用程式的連入要求,您可以使用基本身份驗證,例如使用者名稱和密碼。 基本身份驗證是常見的模式,您可以使用任何用來建置 Web 應用程式或 API 應用程式的語言使用此驗證。

在 [授權]段中,包含下列屬性:

{
   "type": "Basic",
   "username": "<username>",
   "password": "<password>"
}
屬性 必要 描述:
type Yes 您想要使用的驗證類型。 針對基本身份驗證,此值必須是 Basic
username Yes 您要用於驗證的使用者名稱
password Yes 您要用於驗證的密碼

透過程式代碼進行 Microsoft Entra 驗證

根據預設,您在 Azure 入口網站 中開啟的 Microsoft Entra 驗證不會提供更細緻的授權。 例如,此驗證只會將您的 API 鎖定為特定租使用者,而不是鎖定特定使用者或應用程式。

若要透過程式代碼限制對邏輯應用程式的 API 存取,請擷取具有 JSON Web 令牌 (JWT) 的標頭。 檢查呼叫端的身分識別,並拒絕不符合的要求。

下一步