從 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 相互驗證。
重要
在生產環境中,一律保護敏感性資訊和秘密,例如認證、憑證、指紋、存取密鑰和 連接字串。 請務必使用 Microsoft Entra ID 和 Azure 金鑰保存庫 安全地儲存這類資訊。 避免將此資訊硬式編碼、與其他用戶共用,或儲存在其他人可存取的任何位置的純文本中。 如果您認為此資訊可能遭到入侵,請儘快輪替您的秘密。 如需詳細資訊,請參閱關於 Azure Key Vault (機器翻譯)。
在 [授權] 區段中,納入以下屬性:
{
"type": "ClientCertificate",
"password": "<password>",
"pfx": "<long-pfx-key>"
}
屬性 | 必要 | 描述: |
---|---|---|
type |
Yes | 驗證類型。 若為 TLS/SSL 用戶端憑證,值必須是 ClientCertificate 。 |
password |
No | 用以存取用戶端憑證的密碼 (PFX 檔案) |
pfx |
Yes | 用戶端憑證的 Base64 編碼內容 (PFX 檔案) |
基本驗證
若要驗證邏輯應用程式傳入 Web 應用程式或 API 應用程式中的要求,您可以使用基本驗證,例如使用者名稱和密碼。 雖然基本身份驗證是常見的模式,但您可以使用任何用來建置 Web 應用程式或 API 應用程式的語言使用此驗證,但在生產案例中,請使用可用的最佳驗證層級。
重要
為了獲得最佳安全性,請盡可能使用 Microsoft Entra ID 搭配 受控識別 進行驗證。 此方法提供更高的安全性,而不需要提供認證。 Azure 會管理此身分識別,並協助保護驗證資訊的安全,因此您不需要自行管理此機密資訊。 若要設定 Azure Logic Apps 的受控識別,請參閱在 Azure Logic Apps 中使用受控識別來驗證對 Azure 資源的存取和連線。
如果您必須使用不同的驗證類型,請使用可用的下一個最高層級安全性選項。 例如,假設您必須改為使用 連接字串 建立連線。 連接字串 包含應用程式存取特定資源、服務或系統所需的授權資訊。 連接字串 中的存取金鑰類似於根密碼。
在生產環境中,一律保護敏感性資訊和秘密,例如認證、憑證、指紋、存取密鑰和 連接字串。 請務必使用 Microsoft Entra ID 和 Azure 金鑰保存庫 安全地儲存這類資訊。 避免將此資訊硬式編碼、與其他用戶共用,或儲存在其他人可存取的任何位置的純文本中。 如果您認為此資訊可能遭到入侵,請儘快輪替您的秘密。 如需詳細資訊,請參閱關於 Azure Key Vault (機器翻譯)。
在 [授權] 區段中,納入以下屬性:
{
"type": "Basic",
"username": "<username>",
"password": "<password>"
}
屬性 | 必要 | 描述: |
---|---|---|
type |
Yes | 您想要使用的驗證類型。 若為基本驗證,值必須是 Basic 。 |
username |
Yes | 您想要用來進行驗證的使用者名稱 |
password |
Yes | 您想要用來進行驗證的密碼 |
透過程式碼進行 Microsoft Entra 驗證
根據預設,您在 Azure 入口網站中開啟的 Microsoft Entra 驗證不提供精細的授權。 例如,這項驗證會將您的 API 鎖定為僅限特定租用戶,而非特定使用者或應用程式。
若要限制 API 透過程式碼存取您的邏輯應用程式,請擷取具有 JSON Web 權杖 (JWT) 的標頭。 檢查呼叫者的身分識別,並拒絕不相符的要求。