共用方式為


使用 Microsoft Entra ID 驗證和授權應用程式,以存取 Azure 轉送實體

Azure 轉送支援使用 Microsoft Entra ID 授權對 Azure 轉送實體的要求 (混合式連線、WCF 轉送)。 使用 Microsoft Entra ID,您可以使用 Azure 角色型存取控制 (Azure RBAC) 將權限授與安全性主體,其可能是使用者、群組或應用程式服務主體。 若要深入了解角色和角色指派,請參閱了解不同的角色

注意

這項功能已在所有區域正式推出 (不包含由 21Vianet 營運的 Microsoft Azure)。

概觀

當安全性主體 (使用者、群組和應用程式) 嘗試存取轉送實體時,要求必須獲得授權。 使用 Microsoft Entra ID 時,存取資源的流程分為兩個步驟。

  1. 首先,安全性主體的身分識別需通過驗證,並傳回 OAuth 2.0 權杖。 要求權杖的資源名稱為 https://relay.azure.net。 如果應用程式在 Azure 實體 (例如 Azure VM、虛擬機器擴展集或 Azure Functions 應用程式) 內執行,則可使用受控識別來存取資源。
  2. 接下來,系統會將權杖作為要求的一部分傳遞給轉送服務,以授權指定資源的存取權 (混合式連線和 WCF 轉送)。 Microsoft Entra 會透過 Azure 角色型存取控制 (Azure RBAC),授與受保護資源的存取權。 Azure 轉送會定義一組 Azure 內建角色,其中包含用來存取轉送實體的一般權限集合。 您也可以定義自訂角色以存取資料。 如需 Azure 轉送所支援之內建角色的清單,請參閱 Azure 轉送的 Azure 內建角色。 對轉送提出要求的原生應用程式和 Web 應用程式,也可以使用 Microsoft Entra ID 來進行授權。

Azure 轉送的 Azure 內建角色

對於 Azure 轉送來說,透過 Azure 入口網站和 Azure 資源管理 API 來管理的命名空間和所有相關資源的作業,皆已使用 Azure RBAC 模型來加以保護。 Azure 提供下列 Azure 內建角色,以授權轉送命名空間的存取:

角色 描述
Azure 轉送擁有者 使用此角色來授與 Azure 轉送資源的「完整」存取權。
Azure 轉送接聽程式 使用此角色來授與 Azure 轉送資源的「接聽和實體讀取」存取權。
Azure 轉送寄件者 使用此角色來授與 Azure 轉送資源的「傳送和實體讀取」存取權。

資源範圍

將 Azure 角色指派給安全性主體之前,請先決定安全性主體應該具備的存取範圍。 最佳做法指出,最好只授與最窄的可能範圍。

下列清單說明您可以將 Azure 轉送資源的存取範圍設定在何種層級 (從最小的範圍開始):

  • 轉送實體:角色指派適用於特定的轉送實體,例如混合式連線或 WCF 轉送。
  • 轉送命名空間:角色指派會套用至命名空間下的所有轉送實體。
  • 資源群組:角色指派會套用至資源群組下的所有轉送資源。
  • 訂用帳戶:角色指派會套用至訂用帳戶中所有資源群組的轉送資源。

注意

請記住,Azure 角色指派最多可能需要五分鐘的時間傳播。 如需內建角色定義方式的詳細資訊,請參閱了解角色定義。 如需建立 Azure 自訂角色的相關資訊,請參閱 Azure 自訂角色

從應用程式進行驗證

使用 Microsoft Entra ID 搭配 Azure 轉送的主要優點是您的認證不再需要儲存在程式碼中。 您可以改為向 Microsoft 身分識別平台要求 OAuth 2.0 存取權杖。 Microsoft Entra 會驗證執行應用程式的安全性主體 (使用者、群組或服務主體)。 如果驗證成功,Microsoft Entra ID 會將存取權杖傳回給應用程式,然後應用程式就可以使用存取權杖來授權存取 Azure 轉送的要求。

下列各節說明如何設定主控台應用程式,以使用 Microsoft 身分識別平台 2.0 進行驗證。 如需詳細資訊,請參閱 Microsoft 身分識別平台 (v2.0) 概觀

如需 OAuth 2.0 程式碼授與流程的概觀,請參閱使用 OAuth 2.0 程式碼授與流程,授權存取 Microsoft Entra Web 應用程式

使用 Microsoft Entra 租用戶註冊您的應用程式

使用 Microsoft Entra ID 授權 Azure 轉送實體的第一個步驟是,從 Azure 入口網站使用 Microsoft Entra 租用戶註冊您的用戶端應用程式。 當您註冊用戶端應用程式時,會向 AD 提供應用程式的相關資訊。 Microsoft Entra ID 接著會提供您可以用來將應用程式與 Microsoft Entra 執行階段產生關聯的用戶端識別碼 (也稱為應用程式識別碼)。

如需向 Microsoft Entra ID 註冊應用程式的逐步指示,請參閱快速入門:向 Microsoft Entra ID 註冊應用程式

重要

記下目錄 (租用戶) 識別碼應用程式 (用戶端) 識別碼。 您將需要這些值才能執行應用程式範例。

建立用戶端密碼

應用程式需要用戶端密碼,才能在要求權杖時證明其身分識別。 在先前連結的相同文章中,請參閱新增用戶端密碼一節來建立用戶端密碼。

重要

記下用戶端密碼。 您需要用戶端密碼才能執行範例應用程式。

使用 Azure 入口網站指派 Azure 角色

在所需範圍內 (轉送實體、命名空間、資源群組、訂閱),將其中一個 Azure 轉送角色指派給應用程式的服務主體。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

執行範例

  1. GitHub 下載主控台應用程式範例。

  2. 根據讀我檔案中的指示,在您的電腦本機執行應用程式。

    注意

    請遵循相同的步驟來執行 WCF 轉送的範例主控台應用程式

範例中醒目提示的程式碼

以下是範例中的程式碼,示範如何使用 Microsoft Entra 驗證,以連線至 Azure 轉送服務。

  1. 使用 TokenProvider.CreateAzureActiveDirectoryTokenProvider 方法建立 TokenProvider 物件。

    如果您尚未建立應用程式註冊,請參閱使用 Microsoft Entra ID 註冊您的應用程式一節來建立應用程式,然後建立用戶端密碼,如建立用戶端密碼一節中所述。

    如果您想要使用現有的應用程式註冊,請遵循這些指示來取得應用程式 (用戶端) 識別碼目錄 (租用戶) 識別碼

    1. 登入 Azure 入口網站
    2. 使用頂端的搜尋列來搜尋並選取 [Microsoft Entra ID]
    3. 在[Microsoft Entra ID] 頁面上,選取左側功能表的 [管理] 區段之中的 [應用程式註冊]
    4. 選取您的應用程式註冊。
    5. 在應用程式註冊的頁面上,您會看到應用程式 (用戶端) 識別碼目錄 (租用戶) 識別碼的值。

    若要取得用戶端密碼,請遵循下列步驟:

    1. 在應用程式註冊頁面上,選取左側功能表上的 [憑證及祕密]
    2. 使用 [值] 資料行中的 [複製] 按鈕,取得 [用戶端密碼] 區段中的祕密。
    static TokenProvider GetAadTokenProvider(string clientId, string tenantId, string clientSecret)
    {
        return TokenProvider.CreateAzureActiveDirectoryTokenProvider(
            async (audience, authority, state) =>
            {
                IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
                    .WithAuthority(authority)
                    .WithClientSecret(clientSecret)
                    .Build();
    
                var authResult = await app.AcquireTokenForClient(new [] { $"{audience}/.default" }).ExecuteAsync();
                return authResult.AccessToken;
            },
            $"https://login.microsoftonline.com/{tenantId}");
    }
    
  2. 透過傳遞混合式連線 URI 和您在上一個步驟中建立的權杖提供者,建立 HybridConnectionListenerHybridConnectionClient 物件。

    接聽程式:

    var listener = new HybridConnectionListener(hybridConnectionUri, tokenProvider);    
    

    傳送者:

    var sender = new HybridConnectionClient(hybridConnectionUri, tokenProvider);    
    

範例

下一步

若要深入了解 Azure 轉送,請參閱下列主題。