快速入門:從 ASP.NET Web 應用程式登入使用者並呼叫 Microsoft Graph API

在本快速入門中,您會下載並執行程式碼範例,示範可透過 Microsoft Entra 帳戶登入使用者的 ASP.NET Web 應用程式。

請參閱 範例 的運作方式以取得圖例。

必要條件

註冊並下載應用程式

提示

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

您有兩個選項可以開始建置應用程式:自動或手動設定。

自動設定

如果您要自動設定應用程式,然後下載程式代碼範例,請遵循下列步驟:

  1. 以至少雲端應用程式 管理員 istrator 身分登入 Microsoft Entra 系統管理中心快速入門體驗。
  2. 輸入應用程式的名稱,然後選取 [ 註冊]。
  3. 依照指示下載並自動在按兩下中設定新的應用程式。

手動設定

如果您想要手動設定應用程式和程式碼範例,請使用下列程式。

步驟 1:註冊您的應用程式

  1. 以至少雲端應用程式 管理員 istrator 身分登入 Microsoft Entra 系統管理中心
  2. 如果您有多個租使用者的存取權,請使用頂端功能表中的 [設定] 圖示,切換至您想要從 [目錄 + 訂用帳戶] 功能表註冊應用程式的租使用者。
  3. 流覽至 [身分>識別應用程式> 應用程式註冊],然後選取 [新增註冊]。
  4. 針對 [ 名稱],輸入應用程式的名稱。 例如,輸入 ASPNET-Quickstart。 您應用程式的使用者會看到此名稱,稍後您可以加以變更。
  5. 將 [重新 導向 URI 類型] 設定為 [Web ],並將 值設定為 https://localhost:44368/
  6. 選取註冊
  7. 在 [管理] 底下,選取 [驗證]
  8. 在 [隱含授與和混合式流程] 區段中,選取 [標識符令牌]。
  9. 選取 [儲存]。

步驟 2:下載專案

下載 ASP.NET 程式代碼範例

提示

若要避免 Windows 中路徑長度限制所造成的錯誤,建議您將封存盤或複製存放庫擷取到磁碟驅動器根附近的目錄。

步驟 3:執行專案

  1. 將.zip檔案解壓縮到接近根資料夾的本機資料夾。 例如,擷取至 C:\Azure-Samples

    建議您將封存解壓縮到磁碟驅動器根目錄附近的目錄,以避免 Windows 上路徑長度限制所造成的錯誤。

  2. 在 Visual Studio 中開啟方案(AppModelv2-WebApp-OpenID 連線-DotNet.sln)。

  3. 根據 Visual Studio 的版本,您可能需要以滑鼠右鍵按兩下專案 AppModelv2-WebApp-OpenID 連線-DotNet,然後選取 [還原 NuGet 套件]。

  4. 選取 [檢視>其他 Windows> 封裝管理員 控制台],以開啟 封裝管理員 控制台。 接著,執行 Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

  5. 編輯 appsettings.json ,並將參數 ClientIdTenantredirectUri 取代為:

    "ClientId" :"Enter_the_Application_Id_here" />
    "TenantId": "Enter_the_Tenant_Info_Here" />
    "RedirectUri" :"https://localhost:44368/" />
    

    在該程式代碼中:

    • Enter_the_Application_Id_here 是您稍早建立之應用程式註冊的應用程式(用戶端)標識碼。 在 Microsoft Entra 系統管理中心 應用程式註冊 的應用程式 [概觀] 頁面上尋找應用程式 (用戶端) 識別碼。
    • Enter_the_Tenant_Info_Here 是下列其中一個選項:
      • 如果您的應用程式僅支援我的組織,請將此值取代為目錄(租使用者)識別碼或租使用者名稱(例如 )。 contoso.onmicrosoft.com 在 Microsoft Entra 系統管理中心 應用程式註冊 的應用程式 [概觀] 頁面上尋找目錄(租使用者)標識符。
      • 如果您的應用程式支援 任何組織目錄中的帳戶,請將此值取代為 organizations
      • 如果您的應用程式支援 所有 Microsoft 帳戶使用者,請將此值取代為 common
    • redirectUri是您在 Microsoft Entra 系統管理中心 應用程式註冊 稍早輸入的重新導向 URI

其他相關資訊

本節提供登入使用者所需的程式碼概觀。 此概觀有助於瞭解程式代碼的運作方式、主要自變數是什麼,以及如何將登入新增至現有的 ASP.NET 應用程式。

範例的運作方式

網頁瀏覽器、Web 應用程式與範例應用程式中 Microsoft 身分識別平台 互動的圖表。

OWIN 中間件 NuGet 套件

您可以在搭配 OWIN 中間件套件的 ASP.NET 中使用 OpenID 連線,使用 Cookie 型驗證來設定驗證管線。 您可以在 Visual Studio 內的 封裝管理員 控制台中執行下列命令來安裝這些套件:

Install-Package Microsoft.Identity.Web.Owin
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Owin.Security.Cookies

OWIN 啟動類別

OWIN 中間件會使用 啟動類別 ,在裝載進程啟動時執行。 在本快速入門中 ,startup.cs 檔案位於根資料夾中。 下列程式代碼顯示本快速入門所使用的參數:

    public void Configuration(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        OwinTokenAcquirerFactory factory = TokenAcquirerFactory.GetDefaultInstance<OwinTokenAcquirerFactory>();

        app.AddMicrosoftIdentityWebApp(factory);
        factory.Services
            .Configure<ConfidentialClientApplicationOptions>(options => { options.RedirectUri = "https://localhost:44368/"; })
            .AddMicrosoftGraph()
            .AddInMemoryTokenCaches();
        factory.Build();
    }
其中 描述
ClientId Azure 入口網站 中註冊之應用程式的應用程式標識碼。
Authority 用戶要驗證的安全性令牌服務 (STS) 端點。 它通常是 https://login.microsoftonline.com/{tenant}/v2.0 針對公用雲端。 在該 URL 中, {tenant} 是您租用戶的名稱、您的租用戶標識碼,或 common 參考通用端點。 (通用端點用於多租用戶應用程式。
RedirectUri 用戶針對 Microsoft 身分識別平台 進行驗證之後傳送的 URL。
PostLogoutRedirectUri 用戶註銷後傳送的 URL。
Scope 要求的範圍清單,以空格分隔。
ResponseType 來自驗證之回應的要求包含授權碼和標識元令牌。
TokenValidationParameters 令牌驗證的參數清單。 在此情況下, ValidateIssuer 會設定為 false ,表示它可以接受來自任何個人、公司或學校帳戶類型的登入。
Notifications 可以在訊息上 OpenIdConnect 執行的委派清單。

驗證挑戰

您可以藉由控制器中要求驗證挑戰來強制使用者登入:

public void SignIn()
{
    if (!Request.IsAuthenticated)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(
            new AuthenticationProperties{ RedirectUri = "/" },
            OpenIdConnectAuthenticationDefaults.AuthenticationType);
    }
}

提示

使用此方法要求驗證挑戰是選擇性的。 當您想要從已驗證和未驗證的使用者存取檢視時,通常會使用它。 或者,您可以使用下一節所述的 方法來保護控制器。

保護控制器或控制器動作的屬性

您可以使用 屬性來保護控制器或控制器動作 [Authorize] 。 此屬性只允許已驗證的使用者存取控制器或動作,以存取控制器中的動作。 當未經驗證的用戶嘗試存取屬性裝飾 [Authorize] 的其中一個動作或控制器時,驗證挑戰就會自動發生。

從控制器呼叫 Microsoft Graph

您可以從控制器呼叫 Microsoft Graph,方法是使用 GetGraphServiceClient 控制器上的擴充方法取得 GraphServiceClient 的實例,如下列程式代碼所示:

    try
    { 
        var me = await this.GetGraphServiceClient().Me.GetAsync();
        ViewBag.Username = me.DisplayName;
    }
    catch (ServiceException graphEx) when (graphEx.InnerException is MicrosoftIdentityWebChallengeUserException)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
        return View();
    }

說明與支援 

如果您需要協助、想要回報問題,或想要了解支援選項,請參閱 開發人員的說明和支援。

下一步

如需建置應用程式和新功能的完整逐步指南,包括本快速入門的完整說明,請參閱 ASP.NET 教學課程。