教學課程:建置使用 Microsoft 身分識別平台 的多租用戶精靈

在本教學課程中,您會下載並執行 ASP.NET 精靈 Web 應用程式,示範如何使用 OAuth 2.0 用戶端認證授與來取得存取令牌來呼叫 Microsoft Graph API。

在本教學課程中:

  • 整合精靈應用程式與 Microsoft 身分識別平台
  • 由系統管理員直接將應用程式許可權授與應用程式
  • 取得存取令牌以呼叫 Microsoft Graph API
  • 呼叫 Microsoft Graph API。

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

必要條件

案例

應用程式會建置為 ASP.NET MVC應用程式。 它會使用 OWIN OpenID 連線 中間件來登入使用者。

這個範例中的「精靈」元件是 API 控制器。 SyncController.cs 呼叫控制器時,它會從 Microsoft Graph 提取客戶 Microsoft Entra 租使用者中的使用者清單。 SyncController.cs 是由 Web 應用程式中的 AJAX 呼叫觸發。 它會使用適用於 .NETMicrosoft 驗證連結庫 (MSAL) 來取得 Microsoft Graph 的存取令牌。

因為應用程式是 Microsoft 商務客戶的多租使用者應用程式,所以它必須提供一種方式,讓客戶能夠「註冊」或「連線」應用程式與其公司數據。 在連線流程期間,Global 管理員 istrator 會先將應用程式許可權直接授與應用程式,讓它可以以非互動式方式存取公司數據,而不需要有登入的使用者。 此範例中的大部分邏輯都示範如何使用身分識別平臺的 管理員同意 端點來達成此連線流程。

Diagram shows UserSync App with three local items connecting to Azure, with Start dot Auth acquiring a token interactively to connect to Microsoft Entra ID, AccountController getting admin consent to connect to Microsoft Entra ID, and SyncController reading user to connect to Microsoft Graph.

如需此範例中所用概念的詳細資訊,請參閱 身分識別平臺的用戶端認證通訊協議檔。

複製或下載此存放庫

從殼層或命令列輸入下列命令:

git clone https://github.com/Azure-Samples/active-directory-dotnet-daemon-v2.git

下載 zip 檔案中的範例。

註冊您的應用程式

此範例有一個專案。 若要向 Microsoft Entra 租使用者註冊應用程式,您可以:

  • 請依照選擇租用戶和設定範例中的步驟來使用您的租使用者
  • 使用下列 PowerShell 腳本:
    • 自動 為您建立 Microsoft Entra 應用程式和相關物件(密碼、許可權、相依性)。
    • 修改 Visual Studio 專案的組態檔。

如果您要使用自動化:

  1. 在 Windows 上,執行 PowerShell 並移至複製目錄的根目錄。

  2. 執行此命令:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    
  3. 執行文稿以建立您的 Microsoft Entra 應用程式,並據以設定範例應用程式的程式代碼:

    .\AppCreationScripts\Configure.ps1
    

    應用程式建立腳本說明執行腳本的其他方式。

  4. 開啟 Visual Studio 方案,然後選取 [ 開始 ] 以執行程式碼。

如果您不想使用自動化,請使用下列各節中的步驟。

選擇租使用者

提示

本文中的步驟可能會根據您從開始的入口網站稍有不同。

  1. 以至少應用程式開發人員身分登入 Microsoft Entra 系統管理中心

  2. 如果您有多個租使用者的存取權,請使用頂端功能表中的 [設定] 圖示,切換至您想要從 [目錄 + 訂用帳戶] 功能表註冊應用程式的租使用者。

  3. 流覽至 [身分>識別應用程式> 應用程式註冊]。

  4. 選取新增註冊

  5. 輸入應用程式的 [名稱],例如 dotnet-web-daemon-v2。 您的應用程式使用者可能會看到此名稱,而且您稍後可以加以變更。

  6. 在 [ 支持的帳戶類型 ] 區段中,選取 任何組織目錄中的 [帳戶]。

  7. 在 [ 重新導向 URI (選擇性)] 區段中,選取 下拉式方塊中的 [Web ],然後輸入 https://localhost:44316/https://localhost:44316/Account/GrantPermissions 作為重新導向 URI。

    如果有兩個以上的重新導向 URI,您稍後必須在成功建立應用程式之後,從 [驗證 ] 索引標籤新增它們。

  8. 選取 [暫存器] 以建立應用程式。

  9. 在應用程式的 [概觀] 頁面上,尋找 應用程式 (用戶端) 識別碼 值,並將其記錄以供日後使用。 您將需要它來設定此專案的 Visual Studio 組態檔。

  10. 在 [管理] 底下,選取 [驗證]

  11. 將前端通道註銷 URL 設定https://localhost:44316/Account/EndSession

  12. 在 [隱含授與和混合式流程] 區段中,選取 [存取令牌標識符令牌]。 此範例需要 啟用隱含授與流程 ,才能登入使用者並呼叫 API。

  13. 選取 [儲存]。

  14. 在 [管理] 下,選取 [憑證與秘密]。

  15. 用戶端密碼區段底下,選取新增用戶端密碼

  16. 輸入金鑰描述(例如 應用程式秘密)。

  17. 選取 [1 年]、[2 年] 或 [永不到期] 的關鍵持續時間

  18. 選取新增。 在安全的位置記錄索引鍵值。 稍後您將需要此密鑰,才能在 Visual Studio 中設定專案。

  19. 在 [管理] 底下,選取 [API 許可權>] [新增許可權]。

  20. 在 [ 常用 Microsoft API] 區段中,選取 [Microsoft Graph]。

  21. 在 [ 應用程式許可權] 區段中,確定已選取正確的許可權: User.Read.All

  22. 選取新增權限

設定範例以使用您的租使用者

在下列步驟中, ClientID 與「應用程式識別碼」或 AppId 相同。

在 Visual Studio 中開啟方案以設定專案。

設定客戶端專案

如果您使用安裝文稿,將會為您套用下列變更。

  1. 開啟 UserSync\Web.Config 檔案。
  2. 尋找應用程式金鑰 ida:ClientId。 將現有值取代為先前記錄之 dotnet-web-daemon-v2 應用程式的應用程式識別碼。
  3. 尋找應用程式金鑰 ida:ClientSecret。 將現有的值取代為您在建立 dotnet-web-daemon-v2 應用程式期間儲存的索引鍵。

執行範例

清除解決方案、重建解決方案、執行UserSync應用程式,然後以系統管理員身分登入 Microsoft Entra 租使用者。 如果您沒有 Microsoft Entra 租使用者進行測試,您可以 依照這些指示 取得一個。

當您登入時,應用程式會先要求您提供登入的許可權,並讀取您的使用者配置檔。 此同意可讓應用程式確保您是商務使用者。

User consent

然後,應用程式會嘗試透過 Microsoft Graph,從您的 Microsoft Entra 租使用者同步處理使用者清單。 如果無法,它會要求您 (租用戶系統管理員) 將租用戶連線到應用程式。

然後,應用程式會要求許可權以讀取租使用者中的用戶清單。

Admin consent

授與許可權之後,即會從應用程式註銷。 此註銷可確保 Microsoft Graph 的任何現有存取令牌都會從令牌快取中移除。 當您再次登入時,取得的新令牌將具有呼叫 Microsoft Graph 所需的許可權。

當您授與許可權時,應用程式可以隨時查詢使用者。 您可以選取 [ 同步處理使用者 ] 按鈕並重新整理使用者清單來確認這一點。 請嘗試新增或移除使用者並重新同步處理清單。 (但請注意,應用程式只會同步處理使用者的第一頁。

關於程式碼

此範例的相關程式代碼位於下列檔案中:

  • App_Start\Startup.Auth.csControllers\AccountController.cs:初始登入。 特別是控制器上的動作具有 Authorize 屬性,這會強制使用者登入。 應用程式會 使用授權碼流程 來登入使用者。
  • Controllers\SyncController.cs:將使用者清單同步至本機記憶體內部存放區。
  • Controllers\UserController.cs:顯示來自本機記憶體內部存放區的用戶清單。
  • Controllers\AccountController.cs:使用管理員同意端點從租使用者管理員取得許可權。

重新建立範例應用程式

  1. 在 Visual Studio 中,建立新的 Visual C#ASP.NET Web 應用程式 (.NET Framework) 專案。
  2. 在下一個畫面上 ,選擇MVC 專案範本。 此外,也新增 Web API 的資料夾和核心參考,因為您稍後會新增 Web API 控制器。 將專案選擇的驗證模式保留為預設值: 無驗證
  3. 在 [方案總管] 視窗中選取專案,然後選取 F4 鍵。
  4. 在項目屬性中,將 [SSL 已啟用] 設定True。 記下 SSL URL 中的資訊。 在 Azure 入口網站 中設定此應用程式的註冊時,您將需要它。
  5. 新增下列 ASP.NET OWIN 中間件 NuGet 套件:
    • Microsoft.Owin.Security.ActiveDirectory
    • Microsoft.Owin.Security.Cookies
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.IdentityModel.Protocol.Extensions
    • Microsoft.Owin.Security.OpenIdConnect
    • Microsoft.Identity.Client
  6. [App_Start] 資料夾中:
    1. 建立名為 Startup.Auth.cs 的類別。
    2. 移除 從命名空間名稱App_Start。
    3. 將 Startup 類別的程式代碼取代為範例應用程式相同檔案中的程式代碼。 請務必採用整個類別定義。 定義會從 公用類別 Startup 變更為 公用部分類別 Startup。
  7. Startup.Auth.cs 中,藉由新增 Visual Studio IntelliSense 所建議的 using 語句來解決遺漏的參考。
  8. 以滑鼠右鍵按兩下項目,選取 [新增],然後選取 [ 類別]。
  9. 在搜尋方塊中,輸入 OWINOWIN 啟動類別 會顯示為選取專案。 選取它,並將類別 命名為 Startup.cs
  10. Startup.cs,將 Startup 類別的程式代碼取代為範例應用程式相同檔案中的程式代碼。 同樣地,請注意,定義會從 公用類別 Startup 變更為 公用部分類別 Startup
  11. 在 Models 資料夾中,新增名為 MsGraphUser.cs 的新類別。 將實作取代為範例中相同名稱的檔案內容。
  12. 新增名為 AccountController 的新 MVC 5 控制器 - 空白實例。 將實作取代為範例中相同名稱的檔案內容。
  13. 新增MVC 5控制器 - 名為UserController的空白實例。 將實作取代為範例中相同名稱的檔案內容。
  14. 新增 Web API 2 控制器 - 名為 SyncController空白實例。 將實作取代為範例中相同名稱的檔案內容。
  15. 針對使用者介面,在 Views\Account 資料夾中,新增三個名為 GrantPermissionsIndexUserMismatch 的空白檢視實例(不含模型)。 在 Views\User 資料夾中新增名為 Index的 。 將實作取代為範例中相同名稱的檔案內容。
  16. 更新 Shared_Layout.cshtml 和 Home\Index.cshtml,以正確地將各種檢視連結在一起。

將範例部署至 Azure

此專案具有 Web 應用程式和 Web API 專案。 若要將它們部署到 Azure 網站,請針對每個網站採取下列步驟:

  1. 建立 Azure 網站。
  2. 將 Web 應用程式和 Web API 發佈至網站。
  3. 更新用戶端以呼叫網站,而不是 IIS Express。

建立 dotnet-web-daemon-v2 並將其發佈至 Azure 網站

  1. 登入 Azure 入口網站
  2. 在左上角,選取 [建立資源]
  3. 選取 [Web>Web 應用程式],然後提供您的網站名稱。 例如,將它 命名為 dotnet-web-daemon-v2-contoso.azurewebsites.net
  4. 選取 [訂帳戶]、[資源群組] 和 [App Service 方案] 和 [位置] 的資訊。 OSWindows,而 [發佈 ] 是 程序代碼
  5. 選取 [建立 ],並等候建立應用程式服務。
  6. 當您取得 部署成功 通知時,請選取 [移至資源 ] 以移至新建立的應用程式服務。
  7. 建立網站之後,請在 [儀錶板] 中尋找它,然後選取它以開啟 App Service 的 [概觀] 畫面。
  8. 從 App Service 的 [ 概觀 ] 索引標籤中,選取 [取得發佈配置檔] 連結並加以儲存,以下載發佈配置檔 。 您可以使用其他部署機制,例如從原始檔控制部署。
  9. 切換至 Visual Studio,然後:
    1. 移至 dotnet-web-daemon-v2 專案。
    2. 以滑鼠右鍵按兩下 方案總管中的項目,然後選取 [發佈]。
    3. 選取底部列的 [ 匯入配置檔 ],然後匯入您稍早下載的發行配置檔。
  10. 選取設定
  11. [連線 ion] 索引標籤上,更新目的地 URL,使其使用 “https”。例如,使用 https://dotnet-web-daemon-v2-contoso.azurewebsites.net。 選取 [下一步]。
  12. [設定] 索引標籤上,確定已清除 [啟用組織驗證]。
  13. 選取 [儲存]。 在主畫面上選取 [發佈 ]。

Visual Studio 會發佈專案,並自動開啟瀏覽器至專案的 URL。 如果您看到專案的預設網頁,則發行集成功。

更新 dotnet-web-daemon-v2 的 Microsoft Entra 租使用者應用程式註冊

  1. 返回 Microsoft Entra 系統管理中心,然後在 應用程式註冊 中選取 dotnet-web-daemon-v2 應用程式。
  2. 在應用程式的 [ 驗證 ] 頁面上,使用服務的位址更新 Front-channel 註銷 URL 字段。 例如,使用 https://dotnet-web-daemon-v2-contoso.azurewebsites.net/Account/EndSession
  3. 從 [ 商標 ] 功能表中,將 [首頁 URL ] 更新為您的服務位址。 例如,使用 https://dotnet-web-daemon-v2-contoso.azurewebsites.net
  4. 儲存設定。
  5. 在 [驗證>重新導向 URI] 功能表的值清單中新增相同的 URL。 如果您有多個重新導向 URL,請確定有新的專案會針對每個重新導向 URL 使用 App Service 的 URI。

清除資源

不再需要時,請刪除您在註冊應用程式步驟中 建立的應用程式 物件。 若要移除應用程式,請遵循移除您或貴組織所撰寫之應用程式的指示

取得說明

使用 Microsoft Q&A 從社群取得支援。 先在 Microsoft Q&A詢問您的問題,並瀏覽現有的問題,以查看是否有人先前詢問過您的問題。 請確定您的問題或批註會以 azure-ad-adal-deprecationazure-ad-msaldotnet-standard標記。

如果您在範例中找到 Bug,請在 GitHub 問題上 提出問題

如果您在 MSAL.NET 中找到錯誤,請在 GitHub 問題 MSAL.NET 提出問題

若要提供建議,請移至 [ 使用者語音] 頁面

下一步

深入瞭解如何建置使用 Microsoft 身分識別平台 來存取受保護 Web API 的精靈應用程式: