從 Azure Logic Apps 呼叫自訂 API 的作業時新增驗證
若要改善對 API 發出呼叫的安全性,您可以透過 Azure 入口網站設定 Microsoft Entra 驗證,如此便不需要更新您的程式碼。 或者,您可以透過您的 API 程式碼要求並強制執行驗證。
您可以使用下列方式新增驗證:
無程式碼變更:透過 Azure 入口網站使用 Microsoft Entra ID 來保護您的 API,因此您不需要更新程式碼或重新部署您的 API。
注意
根據預設,您在 Azure 入口網站中選取的 Microsoft Entra 驗證不提供精細的授權。 例如,這項驗證會將您的 API 鎖定為僅限特定租用戶,而非特定使用者或應用程式。
更新您的 API 程式碼:保護您的 API,方法是透過程式碼強制執行憑證驗證、基本驗證,或 Microsoft Entra 驗證。
驗證對 API 的呼叫,不需要變更程式碼
以下是這個方法的一般步驟:
建立兩個 Microsoft Entra 應用程式身分識別:一個用於邏輯應用程式資源,一個用於 Web 應用程式 (或 API 應用程式)。
若要驗證對您 API 發出的呼叫,請使用與邏輯應用程式的 Microsoft Entra 應用程式身分識別關聯的服務主體認證 (用戶端識別碼和祕密)。
將應用程式識別碼包含在邏輯應用程式工作流程定義中。
第 1 部分:為您的邏輯應用程式建立 Microsoft Entra 應用程式身分識別
您的邏輯應用程式資源會使用此 Microsoft Entra 應用程式身分識別向 Microsoft Entra 驗證。 您只需要為您的目錄設定一次這個身分識別。 例如,儘管您可以為每個邏輯應用程式建立唯一的身分識別,但可以選擇讓所有的 Logic Apps 使用相同的身分識別。 您可以在 Azure 入口網站或使用 PowerShell 設定這些身分識別。
在 Azure 入口網站中,選取 [Microsoft Entra ID]。
請確認您與 web 應用程式或 API 應用程式位於相同的目錄中。
提示
若要切換目錄,請選擇您的設定檔,然後選取另一個目錄。 或者,選取 [概觀]>[切換目錄]。
在目錄功能表中的 [管理] 下選取 [應用程式註冊]>[新增註冊]。
應用程式註冊清單會顯示您目錄中的所有應用程式註冊。 若要只檢視您的應用程式註冊,請選取 [擁有的應用程式]。
提供邏輯應用程式的應用程式身分識別的使用者面向名稱。 選取支援的帳戶類型。 若為 [重新導向 URI],選取 [Web],提供唯一的 URL 以傳回驗證回應,然後選取 [註冊]。
[擁有的應用程式] 清單現在包含您建立的應用程式身分識別。 如果此身分識別未出現,請在工具列上選取 [重新整理]。
在應用程式註冊清單中,選取新的應用程式識別碼。
在應用程式身分識別導覽功能表中,選取 [概觀]。
在 [概觀] 窗格中的 [Essential] 下方,複製並儲存用來作為第 3 部分邏輯應用程式「用戶端識別碼」的應用程式識別碼。
從應用程式身分識別導覽功能表,選取 [憑證與祕密]。
在 [用戶端密碼] 索引標籤中,選取 [新增用戶端密碼]。
在 [描述] 下,提供您祕密的名稱。 在 [到期時間] 下,選取您祕密的持續時間。 完成後,選取 [新增]。
您要建立的祕密會作為應用程式識別碼的「祕密」或邏輯應用程式的密碼。
在 [憑證與祕密] 窗格的 [用戶端密碼] 下,您的祕密現在會連同祕密值和祕密識別碼一起顯示。
複製祕密值以供後續使用。 當您在第 3 部分設定邏輯應用程式時,您要指定這個值作為「祕密」或密碼。
第 2 部分:為您的 Web 應用程式或 API 應用程式建立 Microsoft Entra 應用程式身分識別
如果已部署 web 應用程式或 API 應用程式,您就可以開啟驗證,並在 Azure 入口網站中建立應用程式識別碼。 否則,您可以在您使用 Azure Resource Manager 範本進行部署時開啟驗證。
在Azure 入口網站中為已部署的 Web 應用程式或 API 應用程式建立應用程式身分識別
在 Azure 入口網站中,找出並選取您的 Web 應用程式或 API 應用程式。
在 [設定] 下,選取 [驗證]>[新增識別提供者]。
在 [新增識別提供者] 窗格開啟後,在 [基本] 索引標籤的 [識別提供者] 清單中,選取 [Microsoft] 以使用 Microsoft Entra 身分識別,然後選取 [新增]。
現在建立 Web 應用程式或 API 應用程式的應用程式識別碼,如下所示:
針對 [應用程式註冊類型],請選取 [建立新的應用程式註冊]。
針對 [名稱],請提供應用程式身分識別的名稱。
針對 [支援的帳戶類型],請選取適合您案例的帳戶類型。
針對 [限制存取],請選取 [需要驗證]。
針對 [未驗證的要求],請根據您的案例選取選項。
完成後,選取 [新增]。
您剛才為 Web 應用程式或 API 應用程式建立的應用程式身分識別現在會出現在 [識別提供者] 區段中:
提示
如果應用程式身分識別未出現,請在工具列上選取 [重新整理]。
現在您必須尋找的應用程式 (用戶端) 識別碼之用戶端識別碼和租用戶識別碼,是您剛為 Web 應用程式或 API 應用程式所建立。 您可以在第 3 部分中使用這些識別碼。 因此,繼續執行 Azure 入口網站的下列步驟。
在 Azure 入口網站中尋找 web 應用程式或 API 應用程式的應用程式識別碼之用戶端識別碼和租用戶識別碼
在 Web 應用程式的導覽功能表上,選取 [驗證]。
在 [識別提供者] 區段中,尋找您之前建立的應用程式身分識別。 選取應用程式身分識別的名稱。
應用程式身分識別的 [概觀] 窗格開啟後,請尋找應用程式 (用戶端) 識別碼與目錄 (租用戶) 識別碼。 複製與儲存要在第 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] 按鈕:
第 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"
}
屬性 | 必要 | 描述: |
---|---|---|
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) 的標頭。 檢查呼叫者的身分識別,並拒絕不相符的要求。