教程:向应用程序添加登录
在上一教程中,已创建并配置 ASP.NET Core 项目以进行身份验证。 本教程将安装所需的包,并将实现身份验证的代码添加到登录和注销体验。
本教程的内容:
- 找到并安装身份验证所需的 NuGet 程序包
- 在代码中实现身份验证
- 添加登录和注销体验
先决条件
- 完成教程:准备用于身份验证的应用程序中的先决条件和步骤。
安装标识包
必须在项目中安装与标识相关的“NuGet 包”,才能启用用户身份验证。
- 在 Visual Studio 的顶部菜单中,选择“工具”>“NuGet 包管理器”>“管理解决方案的 NuGet 程序包”。
- 选中“浏览”选项卡后,搜索并选择“Microsoft.Identity.Web.UI”。 选中“项目”复选框,然后选择“安装”。
- 对 Microsoft.Identity.Web.Diagnostics 和 Microsoft.Identity.Web.DownstreamApi 重复此操作。
实现身份验证并获取令牌
打开 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 文件
- 展开“页面”,右键单击“共享”,然后选择“添加”>“Razor 页面”。
- 选择“Razor 页面 - 空”,然后选择“添加”。
- 输入 _LoginPartial.cshtml 作为名称,然后选择“添加”。
编辑 _LoginPartial.cshtml 文件
打开 _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>
打开 _Layout.cshtml,并添加对上一步中创建的
_LoginPartial
的引用。 此单行应放置在</ul>
和</div>
之间:</ul> <partial name="_LoginPartial" /> </div>