分享方式:


從 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 驗證。 您只需要為您的目錄設定一次這個身分識別。 例如,儘管您可以為每個邏輯應用程式建立唯一的身分識別,但可以選擇讓所有的 Logic Apps 使用相同的身分識別。 您可以在 Azure 入口網站或使用 PowerShell 設定這些身分識別。

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

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

    提示

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

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

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

    顯示 Azure 入口網站 的螢幕快照,其中已選取 [Microsoft Entra 實例]、[應用程式註冊] 窗格和 [新增應用程式註冊]。

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

    顯示 [註冊應用程式] 窗格的螢幕快照,其中具有要傳送驗證回應的應用程式身分識別名稱和 URL。

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

    顯示邏輯應用程式應用程式身分識別的螢幕快照。

  5. 在應用程式註冊清單中,選取新的應用程式識別碼。

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

  7. 在 [概觀] 窗格中的 [Essential] 下方,複製並儲存用來作為第 3 部分邏輯應用程式「用戶端識別碼」的應用程式識別碼

    顯示應用程式 (用戶端) 識別元加上底線的螢幕快照。

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

  9. 在 [用戶端密碼] 索引標籤中,選取 [新增用戶端密碼]

  10. 在 [描述] 下,提供您祕密的名稱。 在 [到期時間] 下,選取您祕密的持續時間。 完成後,選取 [新增]

    您要建立的祕密會作為應用程式識別碼的「祕密」或邏輯應用程式的密碼。

    顯示應用程式身分識別秘密建立的螢幕快照。

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

    顯示已選取秘密值的 [複製] 按鈕和秘密識別碼的螢幕快照。

  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 應用程式建立的應用程式身分識別現在會出現在 [識別提供者] 區段中:

    此螢幕快照顯示 Web 應用程式或 API 應用程式新建立的應用程式身分識別。

    提示

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

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

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

  1. 在 Web 應用程式的導覽功能表上,選取 [驗證]

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

    此螢幕快照顯示開啟 [概觀] 窗格的新建立應用程式身分識別。

  3. 應用程式身分識別的 [概觀] 窗格開啟後,請尋找應用程式 (用戶端) 識別碼目錄 (租用戶) 識別碼。 複製與儲存要在第 3 部分使用的值。

    顯示應用程式身分識別 [概觀] 窗格的螢幕快照,其中以 [應用程式(用戶端) 識別符] 值和 [目錄(租使用者) 標識符] 值加上底線。

    您也可以視需要在您的 Web 應用程式或 API 應用程式的部署範本中使用租用戶識別碼 GUID。 此 GUID 是您特定租用戶的 GUID (「租用戶 ID」),且應該會出現在此 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>/"
         }
      }
   }
]

若要自動隨著 Microsoft Entra 驗證部署空白 Web 應用程式和邏輯應用程式,請檢視這裡的完整範本,或選取以下的 [部署至 Azure] 按鈕:

部署至 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) 的標頭。 檢查呼叫者的身分識別,並拒絕不相符的要求。

下一步