教程:向应用程序添加登录

上一教程中,已创建并配置 ASP.NET Core 项目以进行身份验证。 本教程将安装所需的包,并将实现身份验证的代码添加到登录和注销体验。

本教程的内容:

  • 找到并安装身份验证所需的 NuGet 程序包
  • 在代码中实现身份验证
  • 添加登录和注销体验

先决条件

安装标识包

必须在项目中安装与标识相关的“NuGet 包”,才能启用用户身份验证。

  1. 在 Visual Studio 的顶部菜单中,选择“工具”>“NuGet 包管理器”>“管理解决方案的 NuGet 程序包”。
  2. 选中“浏览”选项卡后,搜索并选择“Microsoft.Identity.Web.UI”。 选中“项目”复选框,然后选择“安装”。
  3. Microsoft.Identity.Web.DiagnosticsMicrosoft.Identity.Web.DownstreamApi 重复此操作。

实现身份验证并获取令牌

  1. 打开 Program.cs,并将整个文件内容替换为以下代码片段:

     // <ms_docref_import_types>
     using Microsoft.AspNetCore.Authorization;
     using Microsoft.AspNetCore.Mvc.Authorization;
     using Microsoft.Identity.Web;
     using Microsoft.Identity.Web.UI;
     // </ms_docref_import_types>
    
     // <ms_docref_add_msal>
     WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
     IEnumerable<string>? initialScopes = builder.Configuration["DownstreamApi:Scopes"]?.Split(' ');
    
    
     builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration, "AzureAd")
         .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
             .AddDownstreamApi("DownstreamApi", builder.Configuration.GetSection("DownstreamApi"))
             .AddInMemoryTokenCaches();
     // </ms_docref_add_msal>
    
     // <ms_docref_add_default_controller_for_sign-in-out>
     builder.Services.AddRazorPages().AddMvcOptions(options =>
         {
             var policy = new AuthorizationPolicyBuilder()
                           .RequireAuthenticatedUser()
                           .Build();
             options.Filters.Add(new AuthorizeFilter(policy));
         }).AddMicrosoftIdentityUI();
     // </ms_docref_add_default_controller_for_sign-in-out>
    
     // <ms_docref_enable_authz_capabilities>
     WebApplication app = builder.Build();
    
     app.UseAuthentication();
     app.UseAuthorization();
     // </ms_docref_enable_authz_capabilities>
    
     app.UseHttpsRedirection();
     app.UseStaticFiles();
    
     app.UseRouting();
    
     app.MapRazorPages();
     app.MapControllers();
    
     app.Run();
    

添加登录和注销体验

安装 NuGet 包并添加身份验证所需的代码后,请添加登录和注销体验。

创建 _LoginPartial.cshtml 文件

  1. 展开“页面”,右键单击“共享”,然后选择“添加”>“Razor 页面”。
  2. 选择“Razor 页面 - 空”,然后选择“添加”。
  3. 输入 _LoginPartial.cshtml 作为名称,然后选择“添加”。

编辑 _LoginPartial.cshtml 文件

  1. 打开 _LoginPartial.cshtml,并添加以下代码以添加登录和注销体验:

     @using System.Security.Principal
    
     <ul class="navbar-nav">
     @if (User.Identity?.IsAuthenticated == true)
     {
             <li class="nav-item">
                 <span class="navbar-text text-dark">Hello @User.Identity?.Name!</span>
             </li>
             <li class="nav-item">
                 <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
             </li>
     }
     else
     {
             <li class="nav-item">
                 <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
             </li>
     }
     </ul>
    
  2. 打开 _Layout.cshtml,并添加对上一步中创建的 _LoginPartial 的引用。 此单行应放置在 </ul></div> 之间:

         </ul>
             <partial name="_LoginPartial" />
     </div>
    

后续步骤