共用方式為


設定權杖發行事件的自訂宣告提供者

本文說明如何設定權杖發行啟動事件 (部分機器翻譯) 的自訂宣告提供者。 您將使用現有的 Azure Functions REST API 註冊自訂驗證延伸模組,並新增其應該會從 REST API 剖析的屬性。 為了測試自訂驗證延伸模組,您將註冊範例 OpenID Connect 應用程式以取得權杖並檢視宣告。

必要條件

步驟 1:註冊自訂驗證延伸模組

您現在會設定自訂驗證延伸模組,以供 Microsoft Entra ID 用來呼叫您的 Azure 函式。 自訂驗證延伸模組包含您 REST API 端點的相關資訊、其從您的 REST API 剖析的宣告,以及如何向您的 REST API 進行驗證。 請遵循下列步驟,向 Azure 函式應用程式註冊自訂驗證延伸模組。

注意

您最多可以有 100 個自訂延伸模組原則。

註冊自訂驗證延伸模組

  1. 至少以應用程式系統管理員 (部分機器翻譯) 和驗證系統管理員 (部分機器翻譯) 身分登入 Azure 入口網站
  2. 搜尋並選取 [Microsoft Entra ID],然後選取 [企業應用程式]
  3. 選取 [自訂驗證延伸模組],然後選取 [建立自訂延伸模組]
  4. 在 [基本資料] 中,選取 [TokenIssuanceStart] 事件類型,然後選取 [下一步]
  5. 在 [端點設定] 中,填入下列屬性:
    • 名稱 - 自訂驗證延伸模組的名稱。 例如,權杖發行事件
    • 目標 URL - Azure 函式 URL 的 {Function_Url}。 瀏覽至 Azure 函式應用程式的 [概觀] 頁面,然後選取您建立的函式。 在函式 [概觀] 頁面中,選取 [取得函式 URL],並使用複製圖示來複製「customauthenticationextension_extension (系統金鑰)」URL。
    • 描述 - 自訂驗證延伸模組的描述。
  6. 選取 [下一步]。
  7. 在 [API 驗證] 中,選取 [建立新的應用程式註冊] 選項,以建立代表您「函式應用程式」的應用程式註冊。
  8. 為應用程式命名,例如「Azure Functions 驗證事件 API」
  9. 選取 [下一步]。
  10. 在 [宣告] 中,輸入您預期自訂驗證延伸模組要從您的 REST API 剖析並且會合併到權杖中的的屬性。 新增下列宣告:
    • dateOfBirth
    • customRoles
    • apiVersion
    • correlationId
  11. 選取 [下一步],然後選取 [建立],以註冊自訂驗證延伸模組和相關聯的應用程式註冊。
  12. 記下 [API 驗證] 底下的 [應用程式識別碼],需要此識別碼才能在 Azure 函式應用程式中為 Azure 函式設定驗證 (部分機器翻譯)。

在建立自訂驗證延伸模組後,必須向 API 授與權限。 自訂驗證延伸模組會使用 client_credentials,透過 Receive custom authentication extension HTTP requests 權限向 Azure 函式應用程式進行驗證。

  1. 開啟新自訂驗證延伸模組的 [概觀] 頁面。 請記下 [API 驗證] 底下的 [應用程式識別碼],因為在新增識別提供者時需要用到。

  2. 在 [API 驗證] 底下,選取 [授與權限]

  3. 隨即會開啟新的視窗,一旦登入,其便會要求用來接收自訂驗證延伸模組 HTTP 要求的權限。 這可讓自訂驗證延伸模組向 API 進行驗證。 選取 [接受]。

    顯示如何授與管理員同意的螢幕擷取畫面。

步驟 2:設定 OpenID Connect 應用程式以接收擴充的權杖

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

2.1 註冊測試 Web 應用程式

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

  1. 從 Azure 入口網站的 [首頁] 頁面中,選取 [Microsoft Entra ID]

  2. 選取 [應用程式註冊]>[新增註冊]

  3. 輸入應用程式的 [名稱]。 例如,「我的測試應用程式」

  4. 在 [支援的帳戶類型] 底下,選取 [僅在此組織目錄中的帳戶]

  5. 在 [重新導向 URI] 的 [選取平台] 下拉式清單中選取 [Web],然後在 URL 文字輸入框中輸入 https://jwt.ms

  6. 選取 [註冊] 以完成應用程式註冊。

    顯示如何選取受支援帳戶類型和重新導向 URI 的螢幕擷取畫面。

  7. 在應用程式註冊的 [概觀] 頁面中,複製 [應用程式 (用戶端) 識別碼]。 後續步驟會將應用程式識別碼稱為 {App_to_enrich_ID}。 在 Microsoft Graph 中,則會以「appId」屬性來加以參考。

    螢幕擷取畫面,其中顯示如何複製應用程式識別碼。

2.2 啟用隱含流程

jwt.ms 測試應用程式會使用隱含流程。 請在「我的測試應用程式」註冊中啟用隱含流程:

  1. 在 [管理] 底下,選取 [驗證]
  2. 在 [Implicit grant and hybrid flows] \(隱含授與和混合式流程\) 下,選取 [ID tokens (used for implicit and hybrid flows)] \(識別碼權杖 (用於隱含和混合式流程)\) 核取方塊。
  3. 選取 [儲存]。

2.3 為宣告對應原則啟用您的應用程式

宣告對應原則可用來選取哪些從自訂驗證延伸模組傳回的屬性會對應至權杖。 若要允許增加權杖,您必須明確啟用應用程式註冊以接受對應的宣告:

  1. 在 [我的測試應用程式] 註冊中,於 [管理] 底下,選取 [資訊清單]
  2. 在資訊清單中,找出 acceptMappedClaims 屬性,並將值設定為 true
  3. accessTokenAcceptedVersion 設定為 2
  4. 選取儲存以儲存變更。

下列 JSON 程式碼片段會示範如何設定這些屬性。

{
	"id": "22222222-0000-0000-0000-000000000000",
	"acceptMappedClaims": true,
	"accessTokenAcceptedVersion": 2,  
    ...
}

警告

若為多租用戶應用程式,請不要將 acceptMappedClaims 屬性設定為 true,此舉可讓惡意執行者為您的應用程式建立宣告對應原則。 相反地,請設定自訂簽署金鑰 (英文)。

繼續進行下一個步驟:將自訂宣告提供者指派給您的應用程式

步驟 3:將自訂宣告提供者指派給您的應用程式

若要使用來自自訂驗證延伸模組的宣告來發行權杖,您必須將自訂宣告提供者指派給應用程式。 這會以權杖對象作為基礎,因此必須將提供者指派給用戶端應用程式以接收識別碼權杖中的宣告,以及指派給資源應用程式以接收存取權杖中的宣告。 自訂宣告提供者會依賴使用「權杖發行啟動」事件接聽程式所設定的自訂驗證延伸模組。 您可以選擇是要將自訂宣告提供者中的所有宣告還是宣告子集對應至權杖。

注意

您只能在應用程式與自訂延伸模組之間建立 250 個唯一指派。 如果您想要將相同的自訂延伸模組呼叫套用至多個應用程式,建議您使用 authenticationEventListeners (英文) Microsoft Graph API 來為多個應用程式建立接聽程式。 Azure 入口網站不支援此操作。

請遵循下列步驟,使用您的自訂驗證延伸模組來進行「我的測試應用程式」連線:

若要將自訂驗證延伸模組指派為自訂宣告提供者來源;

  1. 從 Azure 入口網站的 [首頁] 頁面中,選取 [Microsoft Entra ID]

  2. 選取 [企業應用程式],然後在 [管理] 底下,選取 [所有應用程式]。 從清單中尋找並選取 [我的測試應用程式]

  3. 從 [我的測試應用程式] 的 [概觀] 頁面中,瀏覽至 [管理],然後選取 [單一登入]

  4. 在 [屬性與宣告] 底下,選取 [編輯]

    顯示如何設定應用程式宣告的螢幕擷取畫面。

  5. 展開 [進階設定] 功能表。

  6. 在 [自訂宣告提供者] 旁邊,選取 [設定]

  7. 展開 [自訂宣告提供者] 下拉式方塊,然後選取您稍早建立的 [權杖發行事件]

  8. 選取 [儲存]。

接下來,從自訂宣告提供者指派屬性,這應該以宣告的形式發行至權杖:

  1. 選取 [新增宣告] 以新增宣告。 提供您想要發行之宣告的名稱,例如 dateOfBirth

  2. 在 [來源] 底下,選取 [屬性],然後從 [來源屬性] 下拉式方塊中選擇 [customClaimsProvider.dateOfBirth]

    顯示如何將宣告對應新增至應用程式的螢幕擷取畫面。

  3. 選取 [儲存]。

  4. 重複此程序以新增 customClaimsProvider.customRoles、customClaimsProvider.apiVersion 和 customClaimsProvider.correlationId 屬性,以及對應的名稱。 讓宣告名稱與屬性名稱相符會比較好。

步驟 4:保護您的 Azure 函式

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

若要保護您的 Azure 函式,請遵循下列步驟來整合 Microsoft Entra 驗證,以驗證隨「Azure Functions 驗證事件 API」應用程式註冊傳入的權杖。 根據您的租用戶類型,選擇下列其中一個索引標籤。

注意

如果 Azure 函式應用程式裝載所在的 Azure 租用戶,和您註冊自訂驗證延伸模組時所在的租用戶不同,請選擇 [OpenID Connect] 索引標籤。

4.1 使用 Microsoft Entra 識別提供者

使用下列步驟,將 Microsoft Entra ID 新增為 Azure 函式應用程式的識別提供者。

  1. Azure 入口網站中,尋找並選取您先前發佈的函式應用程式。

  2. 選取 [設定] 下方的 [驗證]

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

  4. 選取 [Microsoft] 作為識別提供者。

  5. 選取 [員工] 作為租用戶類型。

  6. 在 [應用程式註冊] 底下,選取 [在此目錄中挑選現有的應用程式註冊] 作為 [應用程式註冊類型],然後挑選您先前在註冊自訂宣告提供者時建立的 [Azure Functions 驗證事件 API] 應用程式註冊。

  7. 輸入下列簽發者 URL:https://login.microsoftonline.com/{tenantId}/v2.0,其中 {tenantId} 是員工租用戶的租用戶識別碼。

  8. 在 [未經驗證的要求] 底下,選取 [HTTP 401 未經授權] 作為識別提供者。

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

  10. 選取 [新增] 以將驗證新增至您的 Azure 函式。

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

4.2 使用 OpenID Connect 識別提供者

如果您已設定 Microsoft 識別提供者,請略過此步驟。 否則,如果 Azure 函式裝載所在的租用戶和您註冊自訂驗證延伸模組時所在的租用戶不同,請遵循下列步驟來保護您的函式:

建立用戶端密碼

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

將 OpenID Connect 識別提供者新增至您的 Azure 函式應用程式。

  1. 尋找並選取您先前發佈的函式應用程式。

  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. 返回 Azure 函式,在 [應用程式註冊] 底下,輸入 [用戶端密碼]

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

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

步驟 5:測試應用程式

若要測試您的自訂宣告提供者,請遵循下列步驟:

  1. 開啟新的私人瀏覽器,進行瀏覽並透過下列 URL 來登入。

    https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/authorize?client_id={App_to_enrich_ID}&response_type=id_token&redirect_uri=https://jwt.ms&scope=openid&state=12345&nonce=12345
    
  2. {tenantId} 取代為您的租用戶識別碼、租用戶名稱或其中一個已驗證的網域名稱。 例如: contoso.onmicrosoft.com

  3. {App_to_enrich_ID} 取代為「我的測試應用程式」的用戶端識別碼。

  4. 登入之後,您會在 https://jwt.ms 看到已解碼的權杖。 驗證來自 Azure 函式的宣告有出現在已解碼的權杖中,例如 dateOfBirth

另請參閱