登入使用者的 Web 應用程式:程式代碼設定

瞭解如何為登入使用者的 Web 應用程式設定程式碼。

支援 Web 應用程式的 Microsoft 連結庫

下列 Microsoft 連結庫可用來保護 Web 應用程式(和 Web API):

語言/ 架構 項目開啟
GitHub
套件 取得
啟動
登入使用者 存取 Web API 正式推出 (GA)
公開預覽1
.NET MSAL.NET Microsoft.Identity.Client 連結庫無法要求使用者登入的標識碼令牌。 連結庫可以要求受保護 Web API 的存取令牌。 GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel 連結庫無法要求使用者登入的標識碼令牌。2 連結庫無法要求受保護 Web API 的存取令牌。2 GA
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication 快速入門 連結庫可以要求使用者登入的標識碼令牌。 連結庫無法要求受保護 Web API 的存取令牌。 GA
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web 快速入門 連結庫可以要求使用者登入的標識碼令牌。 連結庫可以要求受保護 Web API 的存取令牌。 GA
Java MSAL4J msal4j 快速入門 連結庫可以要求使用者登入的標識碼令牌。 連結庫可以要求受保護 Web API 的存取令牌。 GA
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory 教學課程 連結庫可以要求使用者登入的標識碼令牌。 連結庫可以要求受保護 Web API 的存取令牌。 GA
Node.js MSAL 節點 msal-node 快速入門 連結庫可以要求使用者登入的標識碼令牌。 連結庫可以要求受保護 Web API 的存取令牌。 GA
Python MSAL Python msal 連結庫可以要求使用者登入的標識碼令牌。 連結庫可以要求受保護 Web API 的存取令牌。 GA
Python identity identity 快速入門 連結庫可以要求使用者登入的標識碼令牌。 連結庫可以要求受保護 Web API 的存取令牌。 --

(1)在線服務的通用授權條款適用於公開預覽中的連結庫。

(2) Microsoft.IdentityModel 連結庫只會驗證權杖 - 它無法要求識別碼或存取令牌。

選取對應至您感興趣的平臺的索引標籤:

本文中的代碼段和下列代碼段是從 ASP.NET Core Web 應用程式累加教學課程第 1 章擷取

您可能想要參閱本教學課程以取得完整的實作詳細數據。

組態檔

使用 Microsoft 身分識別平台 登入使用者的 Web 應用程式會透過組態檔進行設定。 這些檔案必須指定下列值:

  • 例如,如果您想要讓應用程式在國家雲端中執行,則為雲端 實例 。 不同的選項包括:
    • Azure 公用雲端的 https://login.microsoftonline.com/
    • https://login.microsoftonline.us/ 適用於 Azure 美國政府
    • https://login.microsoftonline.de/ 適用於 Microsoft Entra 德國
    • https://login.partner.microsoftonline.cn/common 由 21Vianet 營運的 Microsoft Entra China
  • 租使用者標識碼中的物件。 選項會根據您的應用程式是單一租使用者或多租使用者而有所不同。
    • 從 Azure 入口網站 取得的租使用者 GUID,以登入組織中的使用者。 您也可以使用功能變數名稱。
    • organizations 以在任何公司或學校帳戶中登入使用者
    • common 使用任何公司或學校帳戶或 Microsoft 個人帳戶登入使用者
    • consumers 僅使用 Microsoft 個人帳戶登入使用者
  • 從Azure 入口網站 複製的應用程式用戶端標識碼

您可能也會看到授權單位參考、實例的串連租用戶標識碼值。

在 ASP.NET Core 中,這些設定位於 [Microsoft Entra ID] 區段中的 appsettings.json 檔案中。

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id here]",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-oidc"
  }
}

在 ASP.NET Core 中,另一個檔案 (properties\launch 設定.json) 包含應用程式和各種配置檔的 URL (applicationUrl) 和 TLS/SSL 埠 (sslPort)。

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3110/",
      "sslPort": 44321
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "webApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:3110/"
    }
  }
}

在 Azure 入口網站 中,您在應用程式的 [驗證] 頁面上註冊的重新導向 URI 必須符合這些 URL。 針對上述兩個組態檔,它們會是 https://localhost:44321/signin-oidc。 原因是 ,applicationUrlhttp://localhost:3110sslPort已指定 (44321)。 CallbackPath/signin-oidc,如 中所 appsettings.json定義。

同樣地,註銷 URI 會設定為 https://localhost:44321/signout-oidc

注意

SignedOutCallbackPath 應該設定為入口網站或應用程式,以避免在處理事件時發生衝突。

初始化程序代碼

初始化程式代碼差異為平臺相依性。 針對 ASP.NET Core 和 ASP.NET,登入使用者會委派給 OpenID 連線 中間件。 ASP.NET 或 ASP.NET Core 範本會產生 Azure AD v1.0 端點的 Web 應用程式。 需要一些設定,才能將其調整為 Microsoft 身分識別平台。

在 ASP.NET Core Web 應用程式 (和 Web API) 中,應用程式會受到保護,因為您在 Authorize 控制器或控制器動作上有屬性。 此屬性會檢查使用者是否已通過驗證。 在 .NET 6 版本之前,程式代碼初始化是在 Startup.cs 檔案中。 使用 .NET 6 的新 ASP.NET Core 專案不再包含 Startup.cs 檔案。 其位置是 Program.cs 檔案。 本教學課程的其餘部分與 .NET 5 或更低版本有關。

注意

如果您想要直接開始使用適用於 Microsoft 身分識別平台 的新 ASP.NET Core 範本,利用 Microsoft.Identity.Web,您可以下載包含 .NET 5.0 專案範本的預覽 NuGet 套件。 然後,安裝之後,您可以直接具現化 ASP.NET Core Web 應用程式 (MVC 或 Blazor)。 如需詳細資訊,請參閱 Microsoft.Identity.Web Web 應用程式項目範本 。 這是最簡單的方法,因為它會為您執行下列步驟。

如果您想要在 Visual Studio 中使用目前的預設 ASP.NET Core Web 專案啟動專案,或是使用 dotnet new mvc --auth SingleOrgdotnet new webapp --auth SingleOrg,您會看到如下所示的程式代碼:

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
         .AddAzureAD(options => Configuration.Bind("AzureAd", options));

此程式代碼會使用舊版 Microsoft.AspNetCore.Authentication.AzureAD.UI NuGet 套件,用來建立 Azure Active Directory v1.0 應用程式。 本文說明如何建立 Microsoft 身分識別平台 v2.0 應用程式,以取代該程序代碼。

  1. Microsoft.Identity.WebMicrosoft.Identity.Web.UI NuGet 套件新增至您的專案。 Microsoft.AspNetCore.Authentication.AzureAD.UI如果有 NuGet 套件,請將其移除。

  2. 更新 中的 ConfigureServices 程序代碼,使其使用 AddMicrosoftIdentityWebAppAddMicrosoftIdentityUI 方法。

    public class Startup
    {
     ...
     // This method gets called by the runtime. Use this method to add services to the container.
     public void ConfigureServices(IServiceCollection services)
     {
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
             .AddMicrosoftIdentityWebApp(Configuration, "AzureAd");
    
      services.AddRazorPages().AddMvcOptions(options =>
      {
       var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
       options.Filters.Add(new AuthorizeFilter(policy));
      }).AddMicrosoftIdentityUI();
    
  3. Configure在 Startup.cs 的 方法中,啟用對 和app.MapControllers();呼叫app.UseAuthentication();的驗證。

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
     // more code here
     app.UseAuthentication();
     app.UseAuthorization();
    
     app.MapRazorPages();
     app.MapControllers();
     // more code here
    }
    

在該程式代碼中:

  • 擴充 AddMicrosoftIdentityWebApp 方法定義於 Microsoft.Identity.Web 中,其中;

    • 設定選項以讀取組態檔 (這裡從 [Microsoft Entra ID] 區段)
    • 設定 OpenID 連線 選項,讓授權單位是 Microsoft 身分識別平台。
    • 驗證令牌的簽發者。
    • 確保對應至名稱的宣告會從 preferred_username 標識元令牌中的宣告對應。
  • 除了組態物件之外,您也可以在呼叫 AddMicrosoftIdentityWebApp時指定組態區段的名稱。 根據預設,它是 AzureAd

  • AddMicrosoftIdentityWebApp 具有進階案例的其他參數。 例如,追蹤 OpenID 連線 中間件事件可協助您在驗證無法運作時對 Web 應用程式進行疑難解答。 將選擇性參數 subscribeToOpenIdConnectMiddlewareDiagnosticsEvents 設定為 true ,會顯示一組 ASP.NET Core 中間件處理資訊的方式,因為它會從 HTTP 回應進行到 中 HttpContext.User使用者的身分識別。

  • 擴充 AddMicrosoftIdentityUI 方法定義於 Microsoft.Identity.Web.UI 中。 它提供預設控制器來處理登入和註銷。

如需 Microsoft.Identity.Web 如何讓您建立 Web 應用程式的詳細資訊,請參閱 microsoft-identity-web 中的 Web Apps。

下一步

在下一篇文章中,您將瞭解如何觸發登入和註銷。

請移至此案例中的下一篇文章, 登入並註銷