共用方式為


建立屬性集合開始和提交事件的自訂驗證延伸模組 (預覽版)

適用於內含灰色 X 符號的白色圓圈。 員工租用戶 內含白色核取記號的綠色圓圈。 外部租用戶 (深入了解)

本文描述如何在 Microsoft Entra 外部 ID 中為客戶延伸使用者註冊體驗。 在客戶註冊使用者流程中,事件接聽程式可用來在屬性集合之前以及屬性提交時延伸屬性集合程序:

  • OnAttributeCollectionStart 事件發生在屬性集合步驟的開頭,然後屬性集合頁面才會呈現。 您可以新增如預先填入值和顯示封鎖錯誤之類的動作。

    提示

    立即試用

    若要試用此功能,請移至 Woodgrove Groceries 示範,然後啟動「預先填入註冊屬性」使用案例。

  • OnAttributeCollectionSubmit 事件發生在使用者輸入並提交屬性之後。 您可以新增如驗證或修改使用者的項目之類的動作。

    提示

    立即試用

    若要試用此功能,請移至 Woodgrove Groceries 示範,然後啟動「驗證註冊屬性」使用案例,或「封鎖使用者使其無法繼續註冊程序」使用案例。

除了為屬性集合開始和提交事件建立自訂驗證延伸模組之外,您還需要建立 REST API,以定義要對每個事件採取的工作流程動作。 您可以使用任何程式設計語言、架構和主控環境來建立及託管 REST API。 本文示範開始使用 C# Azure Functions 的快速方法。 Azure Functions 可讓您在無伺服器環境中執行程式碼,而不需要先建立虛擬機器 (VM) 或發佈 Web 應用程式。

必要條件

步驟 1:建立自訂驗證延伸模組 REST API (Azure Functions 應用程式)

提示

根據您開始使用的入口網站,本文中的步驟可能略有不同。

在此步驟中,您會使用 Azure Functions 來建立 HTTP 觸發程序函數 API。 函數 API 是使用者流程商務邏輯的來源。 建立觸發程序函數之後,您可以針對下列其中一個事件進行設定:

  1. 使用系統管理員帳戶登入 Azure 入口網站

  2. 從 Azure 入口網站功能表或 [首頁] 頁面,選取 [建立資源]

  3. 搜尋並選取 [函數應用程式],然後選取 [建立]

  4. 在 [基本] 頁面中,使用下表中指定的函數應用程式設定:

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶 將在其中建立新函數應用程式的訂用帳戶。
    資源群組 myResourceGroup 選取現有的資源群組,或要建立函數應用程式的新資源群組名稱。
    函數應用程式名稱 全域唯一名稱 識別新函數應用程式的名稱。 有效的字元是 a-z (不區分大小寫)、0-9-
    發佈 程式碼 發佈程式碼檔案或 Docker 容器的選項。 在本教學課程中,請選取 [程式碼]
    執行階段堆疊 .NET 您慣用的程式設計語言。 在本教學課程中,請選取 ".NET"
    版本 6 (LTS) 同處理序 .NET 執行階段的版本。 同處理序表示您可以在入口網站中建立和修改函數,這是本指南建議的作法
    區域 慣用區域 選取的區域應靠近您或靠近函數能夠存取的其他服務。
    作業系統 Windows 系統會根據您的執行階段堆疊選項預先選取作業系統。
    方案類型 使用量 (無伺服器) 定義如何將資源配置給函數應用程式的主控方案。
  5. 選取 [檢閱 + 建立],以檢閱應用程式組態選項,然後選取 [建立]。 部署需要幾分鐘的時間。

  6. 部署後,請選取 [前往資源] 以檢視新的函數應用程式。

1.1 建立 HTTP 觸發程序函數

現在您已建立 Azure Functions 應用程式,接下來會針對您想要使用 HTTP 要求叫用的動作建立 HTTP 觸發程序函數。 HTTP 觸發程序是由您的 Microsoft Entra 自訂驗證延伸模組參考和呼叫的。

  1. 在函數應用程式的 [概觀] 頁面中,選取 [函數] 窗格,然後選取 [在 Azure 入口網站中建立] 底下的 [建立函數]
  2. 在 [建立函數] 視窗中,將 [開發環境] 屬性保留為 [在入口網站中開發]。 在 [範本] 底下,選取 [HTTP 觸發程序]
  3. 在 [範本詳細資料] 下,為 [新函數] 屬性輸入 "CustomAuthenticationExtensionsAPI"
  4. 針對 [授權層級],選取 [函數]
  5. 選取 [建立]

1.2 設定 OnAttributeCollectionStart 的 HTTP 觸發程序

  1. 從功能表,選取 [程式碼 + 測試]
  2. 針對您要實作的案例,選取下列索引標籤:[繼續]、[封鎖] 或 "SetPrefillValues"。 將程式碼取代為提供的程式碼片段。
  3. 取代程式碼之後,請從頂端功能表中,選取 [取得函數 URL],然後複製該 URL。 您會在步驟 2:建立和註冊自訂驗證延伸模組中使用此 URL 作為目標 URL

使用此 HTTP 觸發程序可讓使用者在不需要採取進一步動作的情況下繼續註冊流程。

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Text;

public static async Task<object> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic request = JsonConvert.DeserializeObject(requestBody);


    var actions = new List<ContinueWithDefaultBehavior>{
        new ContinueWithDefaultBehavior { type = "microsoft.graph.attributeCollectionStart.continueWithDefaultBehavior"}
    };

    var dataObject = new Data {
        type = "microsoft.graph.onAttributeCollectionStartResponseData",
        actions= actions
    };

    dynamic response = new ResponseObject {
        data = dataObject
    };

    // Send the response
    return response;
}

public class ResponseObject
{
    public Data data { get; set; }
}

[JsonObject]
public class Data {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
    public List<ContinueWithDefaultBehavior> actions { get; set; }
}

[JsonObject]
public class ContinueWithDefaultBehavior {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
}

1.3 設定 OnAttributeCollectionSubmit 的 HTTP 觸發程序

  1. 從功能表,選取 [程式碼 + 測試]
  2. 針對您要實作的案例,選取下列索引標籤:[繼續]、[封鎖]、[修改值] 或 [驗證錯誤]。 將程式碼取代為提供的程式碼片段。
  3. 取代程式碼之後,請從頂端功能表中,選取 [取得函數 URL],然後複製該 URL。 您會在步驟 2:建立和註冊自訂驗證延伸模組中使用此 URL 作為目標 URL

使用此 HTTP 觸發程序可讓使用者在不需要採取進一步動作的情況下繼續註冊流程。

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Text;

public static async Task<object> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic request = JsonConvert.DeserializeObject(requestBody);
    
    var actions = new List<ContinueWithDefaultBehavior>{
        new ContinueWithDefaultBehavior { type = "microsoft.graph.attributeCollectionSubmit.continueWithDefaultBehavior"}
    };
						
    var dataObject = new Data {
        type = "microsoft.graph.onAttributeCollectionSubmitResponseData",
        actions= actions
    };
	    
	dynamic response = new ResponseObject {
        data = dataObject
    };

    // Send the response
    return response;
}

public class ResponseObject
{
    public Data data { get; set; }
}

[JsonObject]
public class Data {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
    
    public List<ContinueWithDefaultBehavior> actions { get; set; }
}

[JsonObject]
public class ContinueWithDefaultBehavior {
    [JsonProperty("@odata.type")]
	public string type { get; set; }
}

步驟 2:建立和註冊自訂驗證延伸模組

在此步驟中,您會註冊 Microsoft Entra ID 用來呼叫 Azure Functions 的自訂驗證延伸模組。 自訂驗證延伸模組包含 REST API 端點的相關資訊、它從 REST API 剖析的屬性集合開始和提交動作,以及如何向 REST API 進行驗證。

  1. 至少以應用程式系統管理員驗證系統管理員的身分登入 Microsoft Entra 系統管理中心

  2. 瀏覽至 [身分識別]>[外部身分識別]>[自訂驗證延伸模組]

  3. 選取 [建立自訂延伸模組]

  4. 在 [基本] 中,選取 "AttributeCollectionStart" 事件或 "AttributeCollectionSubmit" 事件,然後選取 [下一步]。 請確定這符合上一個步驟中的設定。

  5. 在 [端點設定] 中,填入下列屬性:

    • 名稱 - 自訂驗證延伸模組的名稱。 例如,On Attribute Collection 事件
    • 目標 URL - Azure Functions URL 的 {Function_Url}
    • 描述 - 自訂驗證延伸模組的描述。
  6. 選取 [下一步]

  7. 在 [API 驗證] 中,選取 [建立新的應用程式註冊] 選項,以建立代表您函數應用程式的應用程式註冊。

  8. 為應用程式命名,例如 Azure Functions 驗證事件 API

  9. 選取 [下一步]

  10. 選取 [建立],其會建立自訂驗證延伸模組和關聯的應用程式註冊。

建立自訂驗證延伸模組之後,將應用程式同意授與已註冊的應用程式,其會允許自訂驗證延伸模組向 API 進行驗證。

  1. 瀏覽至 [身分識別]>[外部身分識別]>[自訂驗證延伸模組 (預覽版)]
  2. 從清單中選取您的自訂驗證延伸模組。
  3. 在 [概觀] 索引標籤上,選取 [授與權限] 按鈕,以對已註冊的應用程式授與管理員同意。 自訂驗證延伸模組會使用 client_credentials 透過 Receive custom authentication extension HTTP requests 權限向 Azure Functions 應用程式進行驗證。 選取 [接受]

步驟 3:將自訂驗證延伸模組新增至使用者流程

現在您可以將自訂驗證延伸模組與一或多個使用者流程建立關聯。

注意

如果您需要建立使用者流程,請遵循為客戶建立註冊和登入使用者流程中的步驟。

3.1 將自訂驗證延伸模組新增至現有的使用者流程

  1. 至少以應用程式系統管理員驗證系統管理員的身分登入 Microsoft Entra 系統管理中心

  2. 如果您有權存取多個租用戶,請使用頂端功能表中的 [設定] 圖示 ,切換至您的外部租用戶。

  3. 瀏覽至 [身分識別] > [外部身分識別] > [使用者流程]

  4. 從清單中選取使用者流程。

  5. 選取 [自訂驗證延伸模組]

  6. 在 [自訂驗證延伸模組] 頁面上,您可以將自訂驗證延伸模組與使用者流程中的兩個不同的步驟建立關聯:

    • 從使用者收集資訊之前會與 "OnAttributeCollectionStart" 事件建立關聯。 選取編輯鉛筆。 只會顯示針對 "OnAttributeCollectionStart" 事件設定的自訂延伸模組。 選取您為屬性集合開始事件設定的應用程式,然後選擇 [選取]
    • 當使用者提交其資訊時會與 "OnAttributeCollectionSubmit" 事件建立關聯。 只會顯示針對 "OnAttributeCollectionSubmit" 事件設定的自訂延伸模組。 選取您為屬性集合提交事件設定的應用程式,然後選擇 [選取]
  7. 請確定這兩個屬性集合步驟旁列出的應用程式正確無誤。

  8. 選取 [儲存] 圖示。

步驟 4:測試應用程式

您可以使用 https://jwt.ms 應用程式來取得權杖並測試自訂驗證延伸模組。 這是 Microsoft 擁有的 Web 應用程式,會顯示已解碼的權杖內容 (權杖內容永遠不會離開您的瀏覽器)。

遵循下列步驟來註冊 jwt.ms Web 應用程式:

4.1 註冊 jwt.ms Web 應用程式

  1. 以至少應用程式系統管理員的身分登入 Microsoft Entra 系統管理中心
  2. 瀏覽至 [身分識別]>[應用程式]>[應用程式註冊]
  3. 選取 [新增註冊]
  4. 輸入應用程式的 [名稱]。 例如,"My Test application"
  5. 在 [支援的帳戶類型] 底下,選取 [僅在此組織目錄中的帳戶]
  6. 在 [重新導向 URI] 的 [選取平台] 下拉式清單中,選取 [網頁],然後在 URL 文字輸入框中輸入 https://jwt.ms
  7. 選取 [註冊] 以完成應用程式註冊。

4.2 取得應用程式識別碼

在您的應用程式註冊中,於 [概觀] 底下,複製 [應用程式 (用戶端) 識別碼]。 App ID 在後續步驟中稱為 <client_id>。 在 Microsoft Graph 中,"appId" 屬性會參考它。

4.3 啟用隱含流程

jwt.ms 測試應用程式會使用隱含流程。 使用下列步驟,在 [我的測試應用程式] 註冊中啟用隱含流程。

重要

Microsoft 建議您使用最安全的可用驗證流程。 這個程序描述的驗證流程需要在應用程式中具備極高的信任度,且伴隨著其他流程並未面臨的風險。 此方法不應該用於對生產應用程式的使用者進行驗證 (深入了解)。

  1. 在 [管理] 底下,選取 [驗證]
  2. 在 [隱含授與和混合式流程] 下,選取 [識別碼權杖 (用於隱含和混合式流程)] 核取方塊。
  3. 選取 [儲存]

步驟 5:保護您的 Azure Functions

Microsoft Entra 自訂驗證延伸模組會使用伺服器對伺服器流程,以取得在 HTTP Authorization 標頭中傳送至 Azure Functions 的存取權杖。 將函數發佈至 Azure 時,特別是在實際執行環境時,您需要驗證在授權標頭中傳送的權杖。

若要保護您的 Azure Functions,請遵循下列步驟來整合 Microsoft Entra 驗證,以驗證隨 Azure Functions 驗證事件 API 應用程式註冊傳入的權杖。

注意

如果 Azure Functions 應用程式託管於與註冊自訂驗證延伸模組的租用戶不同的 Azure 租用戶中,請跳至 5.1 使用 OpenID Connect 識別提供者步驟。

5.1 將識別提供者新增至 Azure Functions

  1. 登入 Azure 入口網站

  2. 瀏覽並選取您先前發佈的函數應用程式。

  3. 在左側功能表中選取 [驗證]

  4. 選取 [新增識別提供者]

  5. 選取 "Microsoft" 作為識別提供者。

  6. 選取 [客戶] 作為租用戶類型。

  7. 在 [應用程式註冊] 底下,輸入您先前在註冊自訂宣告提供者時建立的 Azure Functions 驗證事件 API 應用程式註冊的 client_id

  8. 針對 [簽發者 URL],輸入下列 URL https://{domainName}.ciamlogin.com/{tenant_id}/v2.0,其中

    • {domainName} 是外部租用戶的網域名稱。
    • {tenantId} 是外部租用戶的租用戶識別碼。 您的自訂驗證延伸模組應該在這裡註冊。
  9. 在 [未驗證的要求] 底下,選取 [HTTP 401 未授權] 作為識別提供者。

  10. 取消選取 [權杖存放區] 選項。

  11. 選取 [新增] 以將驗證新增至您的 Azure Functions。

    顯示如何在位於外部租用戶時將驗證新增至函數應用程式的螢幕擷取畫面。

5.2 使用 OpenID Connect 識別提供者

如果您已設定步驟 5:保護您的 Azure Functions,請略過此步驟。 否則,如果 Azure Functions 託管所在的租用戶與您註冊自訂驗證延伸模組時所在的租用戶不同,請遵循下列步驟來保護您的函數:

  1. 登入 Azure 入口網站,然後瀏覽並選取您先前發佈的函數應用程式。

  2. 在左側功能表中選取 [驗證]

  3. 選取 [新增識別提供者]

  4. 選取 "OpenID Connect" 作為識別提供者。

  5. 提供名稱,例如 "Contoso Microsoft Entra ID"

  6. 在 [中繼資料項目] 底下,將下列 URL 輸入至 [文件 URL]。 將 {tenantId} 取代為您的 Microsoft Entra 租用戶識別碼。

    https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration
    
  7. 在 [應用程式註冊] 底下,輸入您先前建立的 Azure Functions 驗證事件 API 應用程式註冊的應用程式識別碼 (用戶端識別碼)。

  8. 在 Microsoft Entra 系統管理中心:

    1. 選取您先前建立的 Azure Functions 驗證事件 API 應用程式註冊。
    2. 選取 [憑證和祕密]>[用戶端密碼]>[新增用戶端密碼]
    3. 新增用戶端密碼的描述。
    4. 選取祕密的到期日,或指定自訂存留期。
    5. 選取 [新增]
    6. 記錄祕密的值,以在用戶端應用程式程式碼中使用。 離開此頁面後,就「不會再次顯示」此祕密值。
  9. 回到 Azure Functions,在 [應用程式註冊] 底下,輸入用戶端密碼

  10. 取消選取 [權杖存放區] 選項。

  11. 選取 [新增] 以新增 OpenID Connect 識別提供者。

步驟 6:測試應用程式

若要測試您的自訂驗證延伸模組,請遵循下列步驟:

  1. 開啟新的私人瀏覽器並瀏覽至下列 URL:

    https://<domainName>.ciamlogin.com/<tenant_id>/oauth2/v2.0/authorize?client_id=<client_id>&response_type=code+id_token&redirect_uri=https://jwt.ms&scope=openid&state=12345&nonce=12345
    
    • <domainName> 取代為您的外部租用戶名稱,並將 <tenant-id> 取代為您的外部租用戶識別碼。
    • <client_id> 取代為您新增至使用者流程的應用程式識別碼。
  2. 登入之後,您會在 https://jwt.ms 看到已解碼的權杖。

後續步驟