適用於:Azure Logic Apps (使用量)
若要改善對 API 發出呼叫的安全性,您可以透過 Azure 入口網站設定 Microsoft Entra 驗證,如此便不需要更新您的程式碼。 或者,您可以透過您的 API 程式碼要求並強制執行驗證。
您可以使用下列方式新增驗證:
無程式碼變更:透過 Azure 入口網站使用 Microsoft Entra ID 來保護您的 API,因此您不需要更新程式碼或重新部署您的 API。
注意
根據預設,您在 Azure 入口網站中選取的 Microsoft Entra 驗證不提供精細的授權。 例如,這項驗證會將您的 API 鎖定為僅限特定租用戶,而非特定使用者或應用程式。
更新你的 API 程式碼:透過程式碼強制執行 憑證認證 或 Microsoft Entra 認證 來保護你的 API。
驗證對 API 的呼叫,不需要變更程式碼
以下是這個方法的一般步驟:
建立兩個 Microsoft Entra 應用程式身份(應用程式註冊):一個用於你的 Logic 應用程式資源,另一個用於你的網頁應用程式(或 API 應用程式)。
若要驗證對您的 API 發出的呼叫,請使用與 Microsoft Entra 應用程式身分識別連接的服務主體的憑證(用戶端 ID 和密碼)。
將應用程式識別碼包含在邏輯應用程式工作流程定義中。
第 1 部分:為您的邏輯應用程式建立 Microsoft Entra 應用程式身分識別
您的邏輯應用程式資源使用這個 Microsoft Entra 應用程式識別來對 Microsoft Entra ID 進行驗證。 你只需要為房客設定一次這個身份。 例如,儘管您可以為每個邏輯應用程式建立唯一的身分識別,但可以選擇讓所有的 Logic Apps 使用相同的身分識別。 您可以在 Azure 入口網站或使用 PowerShell 設定這些身分識別。
在 Azure 入口網站 的搜尋框中,找到並選擇 Microsoft Entra ID。
確認你和你的網頁應用程式或 API 應用程式在同一個租戶裡。
提示
要切換租戶,請從 Azure 標題欄開啟你的個人檔案,選擇 「切換目錄」。
在租戶資源選單中 ,管理下選擇 應用程式註冊。
應用程式註冊頁面會顯示你租戶中所有的應用程式註冊。 若要只檢視您的應用程式註冊,請選取 [擁有的應用程式]。
在工具列中,選擇 新註冊。
在 「註冊申請 」頁面,請依照以下步驟操作:
對於 名稱,請為你的邏輯應用程式的應用程式身份提供一個親切且易用的名稱。
在 支援帳號類型中,選擇最能描述可用該應用程式身份或存取 API 帳號類型的選項。
在重新導向 URI下,選擇 Web 作為平台。 在此選項旁,提供一個獨特的網址,讓該地點回傳驗證回應。
完成後,請選取 [註冊]。
擁有應用程式標籤現在顯示你已建立的應用程式身份。 如果此身分識別未出現,請在工具列上選取 重新整理。
在應用程式註冊清單中,選取新的應用程式識別碼。
在應用程式身分識別導覽功能表中,選取 [概觀]。
在 概覽 頁面的 Essentials 底下,複製並儲存應用程式 (客戶端)ID ,作為你邏輯應用程式在第三部分的客戶端 ID。
在應用程式身份選單中 ,管理選項中選擇 憑證與秘密。
在 用戶端秘密 頁面,選擇 新用戶端秘密。
在 「新增客戶端秘密 」的 描述欄,為你的秘密提供名稱。 關於 到期,請選擇機密的持續時間。 完成後,選取 [新增]。
您要建立的祕密會作為應用程式識別碼的「祕密」或邏輯應用程式的密碼。
在 「憑證與秘密」 頁面的 「用戶端秘密」 標籤中,你的秘密現在會連同秘密值和秘密 ID 一起出現。
複製祕密值以供後續使用。 當您在第 3 部分設定邏輯應用程式時,您要指定這個值作為「祕密」或密碼。
第 2 部分:為您的 Web 應用程式或 API 應用程式建立 Microsoft Entra 應用程式身分識別
如果已部署 web 應用程式或 API 應用程式,您就可以開啟驗證,並在 Azure 入口網站中建立應用程式識別碼。 否則,您可以在您使用 Azure Resource Manager 範本進行部署時開啟驗證。
在Azure 入口網站中為已部署的 Web 應用程式或 API 應用程式建立應用程式身分識別
在 Azure 入口網站中,找出並選取您的 Web 應用程式或 API 應用程式。
在 [設定] 下,選取 [驗證]>[新增識別提供者]。
在 [新增識別提供者] 窗格開啟後,在 [基本] 索引標籤的 [識別提供者] 清單中,選取 [Microsoft] 以使用 Microsoft Entra 身分識別,然後選取 [新增]。
現在建立 Web 應用程式或 API 應用程式的應用程式識別碼,如下所示:
針對 [應用程式註冊類型],請選取 [建立新的應用程式註冊]。
針對 [名稱],請提供應用程式身分識別的名稱。
針對 [支援的帳戶類型],請選取適合您案例的帳戶類型。
針對 [限制存取],請選取 [需要驗證]。
針對 [未驗證的要求],請根據您的案例選取選項。
完成後,選取 [新增]。
在 身份提供者 區塊中,您的網頁應用程式或 API 應用程式的新應用程式識別碼現在會出現:
提示
如果應用程式身分識別未出現,請在工具列上選取 [重新整理]。
現在,您必須找到剛為您的 Web 應用程式或 API 應用程式所建立的應用程式(用戶端)識別碼和租用戶識別碼。 您可以在第 3 部分中使用這些識別碼。 因此,繼續執行 Azure 入口網站的下列步驟。
在 Azure 入口網站中尋找您的 Web 應用程式或 API 應用程式的應用程式識別之用戶端識別碼和租用戶識別碼
在你的網頁應用程式選單中 ,管理選項中,選擇 認證。
在 身份提供者 區塊中,找到你先前建立的應用程式身份。 選擇應用程式身份名稱。
在 概覽 頁面,找到 應用程式(客戶端)ID 與 目錄(租戶)ID 的數值。 複製與儲存要在第 3 部分使用的值。
您也可以視需要在您的 Web 應用程式或 API 應用程式的部署範本中使用租用戶識別碼 GUID。 此 GUID 是您特定租用戶的 GUID (「租用戶 ID」),且應該會出現在此 URL:
https://sts.windows.net/<tenant-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,也就是你網頁應用程式或 API 應用程式的客戶端 ID。 |
clientId |
Yes | 請求存取的客戶端的 GUID,也就是你邏輯應用程式應用程式身份的客戶端 ID。 |
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 金鑰保存庫 安全地儲存這類資訊。 請勿硬式編碼此資訊、與其他用戶共用,或以純文本形式儲存其他人可存取的任何位置。 制定一個計劃,在秘密被洩露時輪換或撤銷秘密。 如需詳細資訊,請參閱以下資源:
在 [授權] 區段中,納入以下屬性:
{
"type": "ClientCertificate",
"password": "<password>",
"pfx": "<long-pfx-key>"
}
| 屬性 | 必要 | 描述: |
|---|---|---|
type |
Yes | 驗證類型。 若為 TLS/SSL 用戶端憑證,值必須是 ClientCertificate。 |
password |
否 | 存取用戶端憑證(PFX 檔案)的密碼。 |
pfx |
Yes | 客戶端憑證(PFX 檔案)中以 base64 編碼的內容。 |
基本驗證
若要驗證邏輯應用程式傳入 Web 應用程式或 API 應用程式中的要求,您可以使用基本驗證,例如使用者名稱和密碼。 雖然基本認證是常見的模式,且你可以在任何用於建置網頁應用程式或 API 應用程式的語言中使用此認證,但務必使用可用或支援的最佳認證等級。
警告
Microsoft 建議「不要」使用以下流程進行驗證和授權:
OAuth 2.0 的資源擁有者密碼認證 (ROPC)
此流程可讓您使用密碼登入應用程式。 流程與多重要素驗證 (MFA) 不相容,需要對應用程式進行非常高的信任,並帶來其他流程中不存在的風險。 只有在不支援或無法使用其他更安全的流程時,才使用此流程。
如需詳細資訊,請參閱 Oauth 2.0 資源擁有者密碼認證。
OAuth 2.0 的隱含授權流程
此權杖型流程適用於傳統 Web 應用程式,其中伺服器對資料處理
POST具有更安全的控制權,而且通常與 授權碼流程搭配使用。 由於此流程處理和傳回 ID 權杖或存取權杖的方式,流程需要對應用程式有非常高的信任度,並帶來其他流程中不存在的風險。 只有在不支援或無法使用其他更安全的流程時,才使用此流程。如需詳細資訊,請參閱 OAuth 2.0 隱含授權流程。
在 [授權] 區段中,納入以下屬性:
{
"type": "Basic",
"username": "<username>",
"password": "<password>"
}
| 屬性 | 必要 | 描述: |
|---|---|---|
type |
Yes | 您想要使用的驗證類型。 基本驗證的值必須是**Basic**。 |
username |
Yes | 你想用來驗證的用戶名稱。 |
password |
Yes | 你想用來驗證的密碼。 |
透過程式碼進行 Microsoft Entra 驗證
根據預設,您在 Azure 入口網站中開啟的 Microsoft Entra 驗證不提供精細的授權。 例如,這項驗證會將您的 API 鎖定為僅限特定租用戶,而非特定使用者或應用程式。
若要限制 API 透過程式碼存取您的邏輯應用程式,請擷取具有 JSON Web 權杖 (JWT) 的標頭。 檢查呼叫者的身分識別,並拒絕不相符的要求。