設定權杖發行事件的自訂宣告提供者
本文說明如何設定權杖發行啟動事件 (部分機器翻譯) 的自訂宣告提供者。 您將使用現有的 Azure Functions REST API 註冊自訂驗證延伸模組,並新增其應該會從 REST API 剖析的屬性。 為了測試自訂驗證延伸模組,您將註冊範例 OpenID Connect 應用程式以取得權杖並檢視宣告。
必要條件
- 能夠建立 Azure Functions 的 Azure 訂用帳戶。 如果您沒有現有的 Azure 帳戶,請註冊免費試用帳戶,或是在建立帳戶時使用 Visual Studio 訂用帳戶權益。
- 為部署至 Azure Functions 的權杖發行事件所設定的 HTTP 觸發程序函式。 如果您沒有這樣的函式,請遵循在 Azure Functions 中建立權杖發行啟動事件的 REST API (部分機器翻譯) 中的步驟。
- 對自訂驗證延伸模組概觀 (部分機器翻譯) 中所涵蓋的概念有基本了解。
- Microsoft Entra ID 租用戶。 您可以使用客戶或員工租用戶來進行本操作指南。
- 若為外部租用戶,請使用註冊和登入使用者流程。
步驟 1:註冊自訂驗證延伸模組
您現在會設定自訂驗證延伸模組,以供 Microsoft Entra ID 用來呼叫您的 Azure 函式。 自訂驗證延伸模組包含您 REST API 端點的相關資訊、其從您的 REST API 剖析的宣告,以及如何向您的 REST API 進行驗證。 請遵循下列步驟,向 Azure 函式應用程式註冊自訂驗證延伸模組。
注意
您最多可以有 100 個自訂延伸模組原則。
註冊自訂驗證延伸模組
- 至少以應用程式系統管理員 (部分機器翻譯) 和驗證系統管理員 (部分機器翻譯) 身分登入 Azure 入口網站。
- 搜尋並選取 [Microsoft Entra ID],然後選取 [企業應用程式]。
- 選取 [自訂驗證延伸模組],然後選取 [建立自訂延伸模組]。
- 在 [基本資料] 中,選取 [TokenIssuanceStart] 事件類型,然後選取 [下一步]。
- 在 [端點設定] 中,填入下列屬性:
- [名稱]:自訂驗證延伸模組的名稱。 例如,「權杖發行事件」。
- 目標 URL - Azure 函式 URL 的
{Function_Url}
。 瀏覽至 Azure 函式應用程式的 [概觀] 頁面,然後選取您建立的函式。 在函式 [概觀] 頁面中,選取 [取得函式 URL],並使用複製圖示來複製「customauthenticationextension_extension (系統金鑰)」URL。 - 描述 - 自訂驗證延伸模組的描述。
- 選取 [下一步]。
- 在 [API 驗證] 中,選取 [建立新的應用程式註冊] 選項,以建立代表您函式應用程式的應用程式註冊。
- 為應用程式命名,例如 Azure Functions 驗證事件 API。
- 選取 [下一步]。
- 在 [宣告] 中,輸入您預期自訂驗證延伸模組要從您的 REST API 剖析並且會合併到權杖中的的屬性。 新增下列宣告:
- dateOfBirth
- customRoles
- apiVersion
- correlationId
- 選取 [下一步],然後選取 [建立],以註冊自訂驗證延伸模組和相關聯的應用程式註冊。
- 記下 [API 驗證] 底下的 [應用程式識別碼],需要此識別碼才能在 Azure 函式應用程式中為 Azure 函式設定驗證 (部分機器翻譯)。
1.2 授與管理員同意
在建立自訂驗證延伸模組後,必須向 API 授與權限。 自訂驗證延伸模組會使用 client_credentials
,透過 Receive custom authentication extension HTTP requests
權限向 Azure 函式應用程式進行驗證。
開啟新自訂驗證延伸模組的 [概觀] 頁面。 請記下 [API 驗證] 底下的 [應用程式識別碼],因為在新增識別提供者時需要用到。
在 [API 驗證] 底下,選取 [授與權限]。
隨即會開啟新的視窗,一旦登入,其便會要求用來接收自訂驗證延伸模組 HTTP 要求的權限。 這可讓自訂驗證延伸模組向 API 進行驗證。 選取 [接受]。
步驟 2:設定 OpenID Connect 應用程式以接收擴充的權杖
若要取得權杖並測試自訂驗證延伸模組,您可以使用 https://jwt.ms 應用程式。 這是 Microsoft 擁有的 Web 應用程式,會顯示已解碼的權杖內容 (權杖內容永遠不會離開您的瀏覽器)。
2.1 註冊測試 Web 應用程式
請遵循下列步驟來註冊 jwt.ms Web 應用程式:
從 Azure 入口網站的 [首頁] 頁面中,選取 [Microsoft Entra ID]。
選取 [應用程式註冊]>[新增註冊]。
輸入應用程式的 [名稱]。 例如,My Test application。
在 [支援的帳戶類型] 底下,選取 [僅在此組織目錄中的帳戶]。
在 [重新導向 URI] 的 [選取平台] 下拉式清單中選取 [Web],然後在 URL 文字輸入框中輸入
https://jwt.ms
。選取 [註冊] 完成應用程式註冊。
在應用程式註冊的 [概觀] 頁面中,複製 [應用程式 (用戶端) 識別碼]。 後續步驟會將應用程式識別碼稱為
{App_to_enrich_ID}
。 在 Microsoft Graph 中,此即為 appId 屬性。
2.2 啟用隱含流程
jwt.ms 測試應用程式會使用隱含流程。 在我的測試應用程式註冊中啟用隱含流程:
- 在 [管理] 底下,選取 [驗證]。
- 在 [Implicit grant and hybrid flows] \(隱含授與和混合式流程\) 下,選取 [ID tokens (used for implicit and hybrid flows)] \(識別碼權杖 (用於隱含和混合式流程)\) 核取方塊。
- 選取 [儲存]。
2.3 為宣告對應原則啟用您的應用程式
宣告對應原則可用來選取哪些從自訂驗證延伸模組傳回的屬性會對應至權杖。 若要允許增加權杖,您必須明確啟用應用程式註冊以接受對應的宣告:
- 在「我的測試應用程式」註冊中,於 [管理] 底下,選取 [資訊清單]。
- 在資訊清單中,找出
acceptMappedClaims
屬性,並將值設定為true
。 - 將
requestedAccessTokenVersion
設定為2
。 - 選取儲存以儲存變更。
下列 JSON 程式碼片段會示範如何設定這些屬性。
{
"id": "22222222-0000-0000-0000-000000000000",
"acceptMappedClaims": true,
"requestedAccessTokenVersion": 2,
...
}
警告
若為多租用戶應用程式,請不要將 acceptMappedClaims
屬性設定為 true
,此舉可讓惡意執行者為您的應用程式建立宣告對應原則。 請改為設定自訂簽署金鑰。
繼續進行下一個步驟:將自訂宣告提供者指派給您的應用程式。
步驟 3:將自訂宣告提供者指派給您的應用程式
若要使用來自自訂驗證延伸模組的宣告來發行權杖,您必須將自訂宣告提供者指派給應用程式。 這會以權杖對象作為基礎,因此必須將提供者指派給用戶端應用程式以接收識別碼權杖中的宣告,以及指派給資源應用程式以接收存取權杖中的宣告。 自訂宣告提供者會依賴使用權杖發行啟動事件接聽程式所設定的自訂驗證延伸模組。 您可以選擇是要將自訂宣告提供者中的所有宣告還是宣告子集對應至權杖。
注意
您只能在應用程式與自訂延伸模組之間建立 250 個唯一指派。 如果您想要將相同的自訂延伸模組呼叫套用至多個應用程式,建議您使用 authenticationEventListeners (英文) Microsoft Graph API 來為多個應用程式建立接聽程式。 Azure 入口網站不支援此操作。
請遵循下列步驟,使用您的自訂驗證延伸模組來進行「我的測試應用程式」連線:
若要將自訂驗證延伸模組指派為自訂宣告提供者來源;
從 Azure 入口網站的 [首頁] 頁面中,選取 [Microsoft Entra ID]。
選取 [企業應用程式],然後在 [管理] 底下,選取 [所有應用程式]。 從清單中尋找並選取 [我的測試應用程式]。
從 [我的測試應用程式] 的 [概觀] 頁面中,瀏覽至 [管理],然後選取 [單一登入]。
在 [屬性與宣告] 底下,選取 [編輯]。
展開 [進階設定] 功能表。
選取 [自訂宣告提供者] 旁邊的 [設定]。
展開 [自訂宣告提供者] 下拉式方塊,然後選取您稍早建立的 [權杖發行事件]。
選取 [儲存]。
接下來,指派自訂宣告提供者中的屬性,這應會以宣告的形式發行至權杖:
步驟 4:保護您的 Azure 函式
Microsoft Entra 自訂驗證延伸模組會使用伺服器對伺服器流程,來取得在 HTTP Authorization
標頭中傳送至 Azure 函式的存取權杖。 將函式發佈至 Azure 時,特別是在生產環境時,您需要驗證在授權標頭中傳送的權杖。
若要保護您的 Azure 函式,請遵循下列步驟來整合 Microsoft Entra 驗證,以驗證隨「Azure Functions 驗證事件 API」應用程式註冊傳入的權杖。 根據您的租用戶類型,選擇下列其中一個索引標籤。
4.1 使用 Microsoft Entra 識別提供者
使用下列步驟,將 Microsoft Entra ID 新增為 Azure 函式應用程式的識別提供者。
在 Azure 入口網站中,尋找並選取您先前發佈的函式應用程式。
選取 [設定] 下方的 [驗證]。
選取 [新增識別提供者]。
識別提供者選取 [Microsoft]。
租用戶類型選取 [員工]。
在 [應用程式註冊] 底下,選取 [在此目錄中挑選現有的應用程式註冊] 作為 [應用程式註冊類型],然後挑選您先前在註冊自訂宣告提供者時建立的 [Azure Functions 驗證事件 API] 應用程式註冊。
輸入下列簽發者 URL:
https://login.microsoftonline.com/{tenantId}/v2.0
,其中{tenantId}
是員工租用戶的租用戶識別碼。在 [用戶端應用程式需求] 下,選取 [允許來字特定用戶端應用程式的要求],然後輸入
99045fe1-7639-4a75-9d4a-577b6ca3810f
。在 [租用戶需求] 下,選取 [允許來自特定租用戶的要求],然後輸入員工租用戶識別碼。
在 [未驗證的要求] 底下,選取 [HTTP 401 未授權] 作為識別提供者。
取消選取 [權杖存放區] 選項。
選取 [新增] 以將驗證新增至您的 Azure 函式。
4.2 使用 OpenID Connect 識別提供者
如果您已設定 Microsoft 識別提供者,請略過此步驟。 否則,如果 Azure 函式裝載所在的租用戶和您註冊自訂驗證延伸模組時所在的租用戶不同,請遵循下列步驟來保護您的函式:
建立用戶端密碼
- 從 Azure 入口網站的 [首頁] 頁面中,選取 [Microsoft Entra ID]>[應用程式註冊]。
- 選取您先前建立的 [Azure Functions 驗證事件 API] 應用程式註冊。
- 選取 [憑證和祕密]>[用戶端密碼]>[新增用戶端密碼]。
- 選取祕密的到期日或指定自訂存留期、新增描述,然後選取 [新增]。
- 記錄祕密的值,以在用戶端應用程式的程式碼中使用。 離開此頁面後,就「不會再次顯示」此祕密值。
將 OpenID Connect 識別提供者新增至您的 Azure 函式應用程式。
尋找並選取您先前發佈的函式應用程式。
選取 [設定] 下方的 [驗證]。
選取 [新增識別提供者]。
選取 [OpenID Connect] 作為識別提供者。
提供名稱,例如 Contoso Microsoft Entra ID。
在 [中繼資料項目] 底下,將下列 URL 輸入至 [文件 URL]。 將
{tenantId}
更換為您的 Microsoft Entra tenant ID。https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration
在 [應用程式註冊] 底下,輸入您先前建立之「Azure Functions 驗證事件 API」應用程式註冊的應用程式識別碼 (用戶端識別碼)。
返回 Azure 函式,在 [應用程式註冊] 底下,輸入用戶端密碼。
取消選取 [權杖存放區] 選項。
選取 [新增] 以新增 OpenID Connect 識別提供者。
步驟 5:測試應用程式
若要測試您的自訂宣告提供者,請遵循下列步驟:
開啟新的私人瀏覽器,進行瀏覽並透過下列 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
將
{tenantId}
更換為您的租用戶識別碼、租用戶名稱或其中一個已驗證的網域名稱。 例如:contoso.onmicrosoft.com
。將
{App_to_enrich_ID}
取代為「我的測試應用程式」的用戶端識別碼。登入之後,您會在
https://jwt.ms
看到已解碼的權杖。 驗證來自 Azure 函式的宣告出現在已解碼的權杖中,例如dateOfBirth
。