共用方式為


快速入門:登入 Microsoft Entra 使用者的 ASP.NET Web 應用程式

歡迎! 這可能不是您預期的頁面。 當我們處理修正程式時,此連結應會將您導向至正確的文章:

快速入門:將「使用 Microsoft 登入」新增至 ASP.NET Web 應用程式

當我們努力解決問題時,也對您的不便深感抱歉,並感謝您的耐心等候。

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

步驟 1:在 Azure 入口網站中設定您的應用程式

若要讓此快速入門中的程式碼範例正常運作,請對於 [重新導向 URI] 輸入 https://localhost:44368/

已設定 您的應用程式已使用此屬性進行設定。

步驟 2:下載專案

使用 Visual Studio 2019 執行專案。

提示

為了避免 Windows 中路徑長度限制所造成的錯誤,建議您將封存解壓縮或將存放庫複製到磁碟機根目錄附近的目錄中。

步驟 3:您的應用程式已設定並準備好執行

我們已使用您的應用程式屬性值來設定您的專案。

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

    建議您將封存解壓縮到磁碟機根目錄附近的目錄中,以避免因 Windows 的路徑長度限制而造成錯誤。

  2. 在 Visual Studio 中開啟解決方案 (AppModelv2-WebApp-OpenIDConnect-DotNet.sln)。

  3. 視 Visual Studio 的版本而定,您可能需要以滑鼠右鍵按一下專案 >AppModelv2-WebApp-OpenIDConnect-DotNet,然後選取 [還原 NuGet 套件]

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

注意

Enter_the_Supported_Account_Info_Here

其他相關資訊

本節會概述登入使用者所需的程式碼。 本概觀有助於了解程式碼的運作方式、主要引數為何,以及如何將登入新增至現有的 ASP.NET 應用程式。

此範例的運作方式

範例應用程式中的網頁瀏覽器、Web 應用程式和 Microsoft 身分識別平台之間的互動關係圖。

OWIN 中介軟體 NuGet 套件

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

Install-Package Microsoft.Owin.Security.OpenIdConnect
Install-Package Microsoft.Owin.Security.Cookies
Install-Package Microsoft.Owin.Host.SystemWeb

OWIN 啟動類別

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

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

    app.UseCookieAuthentication(new CookieAuthenticationOptions());
    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            // Sets the client ID, authority, and redirect URI as obtained from Web.config
            ClientId = clientId,
            Authority = authority,
            RedirectUri = redirectUri,
            // PostLogoutRedirectUri is the page that users will be redirected to after sign-out. In this case, it's using the home page
            PostLogoutRedirectUri = redirectUri,
            Scope = OpenIdConnectScope.OpenIdProfile,
            // ResponseType is set to request the code id_token, which contains basic information about the signed-in user
            ResponseType = OpenIdConnectResponseType.CodeIdToken,
            // ValidateIssuer set to false to allow personal and work accounts from any organization to sign in to your application
            // To only allow users from a single organization, set ValidateIssuer to true and the 'tenant' setting in Web.> config to the tenant name
            // To allow users from only a list of specific organizations, set ValidateIssuer to true and use the ValidIssuers parameter
            TokenValidationParameters = new TokenValidationParameters()
            {
                ValidateIssuer = false // Simplification (see note below)
            },
            // OpenIdConnectAuthenticationNotifications configures OWIN to send notification of failed authentications to > the OnAuthenticationFailed method
            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                AuthenticationFailed = OnAuthenticationFailed
            }
        }
    );
}
其中 描述
ClientId 來自註冊於 Azure 入口網站中之應用程式的應用程式識別碼。
Authority 使用者進行驗證的 Security Token Service (STS) 端點。 這通常是用於公用雲端的 https://login.microsoftonline.com/{tenant}/v2.0。 在該 URL 中,{tenant} 是您租用戶的名稱、您的租用戶識別碼,或通用端點之參考的 common。 (通用端點用於多租用戶應用程式。)
RedirectUri 在使用者針對 Azure 身分識別平台完成驗證之後,會被送往的 URL。
PostLogoutRedirectUri 在使用者登出之後,會被送往的 URL。
Scope 所要求之範圍的清單 (以空格分隔)。
ResponseType 要求驗證的回應包含授權碼和識別碼權杖。
TokenValidationParameters 用於權杖驗證的參數清單。 在此案例中,ValidateIssuer 是設為 false,以表示它可以接受來自任何個人或公司或學校帳戶類型的登入。
Notifications 可在 OpenIdConnect 訊息上執行的委派清單。

注意

設定 ValidateIssuer = false 可簡化此快速入門。 在實際的應用程式中,請驗證簽發者。 請參閱範例以了解如何執行該動作。

驗證挑戰

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

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

提示

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

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

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

說明與支援 

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

下一步

若要取得建置應用程式和新功能的完整逐步指南,包括本快速入門的完整說明,請嘗試 ASP.NET 教學課程。