從 Azure Logic Apps 呼叫自定義 API 時新增驗證
若要改善對 API 呼叫的安全性,您可以透過 Azure 入口網站 設定 Microsoft Entra 驗證,因此您不需要更新程式碼。 或者,您可以透過 API 的程式碼要求並強制執行驗證。
您可以透過下列方式新增驗證:
無程式代碼變更:透過 Azure 入口網站 使用 Microsoft Entra ID 保護您的 API,因此您不需要更新程式碼或重新部署 API。
注意
根據預設,您在 Azure 入口網站 中選取的 Microsoft Entra 驗證不會提供更細緻的授權。 例如,此驗證只會將您的 API 鎖定為特定租使用者,而不是鎖定特定使用者或應用程式。
更新 API 的程式代碼:透過程式代碼強制執行憑證驗證、基本身份驗證或 Microsoft Entra 驗證來保護 API。
驗證對 API 的呼叫,而不變更程式碼
以下是此方法的一般步驟:
建立兩個 Microsoft Entra 應用程式身分識別:一個用於邏輯應用程式資源,另一個用於 Web 應用程式(或 API 應用程式)。
若要驗證對 API 的呼叫,請使用與邏輯應用程式之 Microsoft Entra 應用程式身分識別相關聯的服務主體認證(用戶端識別符和密碼)。
在邏輯應用程式的工作流程定義中包含應用程式標識碼。
第 1 部分:為您的邏輯應用程式建立 Microsoft Entra 應用程式識別
邏輯應用程式資源會使用此 Microsoft Entra 應用程式身分識別來驗證 Microsoft Entra 識別符。 您只需要為您的目錄設定此身分識別一次。 例如,您可以選擇對所有邏輯應用程式使用相同的身分識別,即使您可以為每個邏輯應用程式建立唯一的身分識別也一樣。 您可以在 Azure 入口網站 中設定這些身分識別,或使用PowerShell。
在 Azure 入口網站 中,選取 [Microsoft Entra ID]。
確認您位於與 Web 應用程式或 API 應用程式相同的目錄中。
提示
若要切換目錄,請選擇您的設定檔,然後選取另一個目錄。 或者,選取 [概觀>切換目錄]。
在目錄功能表上的 [管理] 底下,選取 [應用程式註冊>[新增註冊]。
[ 所有註冊] 列表會顯示目錄中的所有應用程式註冊。 若要只檢視您的應用程式註冊,請選取 [ 擁有的應用程式]。
提供邏輯應用程式應用程式身分識別的使用者面向名稱。 選取支持的帳戶類型。 針對 [ 重新導向 URI],選取 [Web],提供可傳回驗證回應的唯一 URL,然後選取 [ 註冊]。
[ 擁有的應用程式 ] 列表現在包含您建立的應用程式身分識別。 如果此身分識別未出現,請在工具列上選取 [ 重新整理]。
從應用程式註冊清單中,選取新的應用程式身分識別。
從應用程式身分識別導覽功能表中,選取 [ 概觀]。
在 [概觀] 窗格的 [基本資訊] 底下,複製應用程式標識符,並將它儲存為第 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 (「租使用者識別碼」),應該會出現在此 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 ] 按鈕:
第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) 的標頭。 檢查呼叫端的身分識別,並拒絕不符合的要求。