专门做广东11选5的网站,商品网站开发,中建八局第一建设有限公司中标,长春网站推广网诚传媒在 ASP.NET Core 应用中#xff0c;基于 Cookie 的身份鉴权是一种常见的身份验证方式#xff0c;特别适用于传统的 Web 应用程序。Cookie 能够在用户的浏览器中存储身份验证数据#xff0c;从而在用户访问应用的不同页面时保持登录状态。
一、配置 Cookie 身份验证
首先基于 Cookie 的身份鉴权是一种常见的身份验证方式特别适用于传统的 Web 应用程序。Cookie 能够在用户的浏览器中存储身份验证数据从而在用户访问应用的不同页面时保持登录状态。
一、配置 Cookie 身份验证
首先在 Startup.cs 或 Program.cs 文件中配置 Cookie 身份验证。这包括设置登录路径、登出路径、Cookie 的过期时间等参数。
在 Program.cs 文件中配置 Cookie 身份验证
var builder WebApplication.CreateBuilder(args);builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options {options.LoginPath /Account/Login;options.LogoutPath /Account/Logout;options.AccessDeniedPath /Account/AccessDenied;options.ExpireTimeSpan TimeSpan.FromMinutes(30);options.SlidingExpiration true;}); // 安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationbuilder.Services.AddControllersWithViews().AddRazorRuntimeCompilation(); var app builder.Build();if (!app.Environment.IsDevelopment())
{app.UseExceptionHandler(/Home/Error);app.UseHsts();
}app.UseHttpsRedirection();
app.UseStaticFiles();app.UseRouting();app.UseAuthentication();
app.UseAuthorization();app.MapControllerRoute(name: default,pattern: {controllerHome}/{actionIndex}/{id?});app.Run();
二、创建登录和登出逻辑
接下来你需要创建处理登录和登出请求的控制器和视图。
创建 AccountController
创建一个 AccountController用于处理登录和登出逻辑
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
using System.Threading.Tasks;publicclassAccountController : Controller
{[HttpGet]public IActionResult Login(string returnUrl /){ViewData[ReturnUrl] returnUrl;return View();}[HttpPost][ValidateAntiForgeryToken]public async TaskIActionResult Login(LoginViewModel model, string returnUrl /){if (ModelState.IsValid){// 验证用户名和密码if (model.Username admin model.Password 123456){var claims new ListClaim{new Claim(ClaimTypes.Name, model.Username),new Claim(ClaimTypes.Role, Admin) // 可以根据需要添加角色};var claimsIdentity new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);var authProperties new AuthenticationProperties{IsPersistent model.RememberMe,RedirectUri returnUrl};await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,new ClaimsPrincipal(claimsIdentity),authProperties);return LocalRedirect(returnUrl);}else{ModelState.AddModelError(string.Empty, Invalid login attempt.);}}return View(model);}[HttpPost][ValidateAntiForgeryToken]public async TaskIActionResult Logout(){await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);return RedirectToAction(Index, Home);}
}
创建 Login 视图
创建一个 Login.cshtml 视图用于显示登录表单
model LoginViewModelh2Login/h2form asp-actionLogin asp-route-returnUrlViewData[ReturnUrl] methodpostdiv asp-validation-summaryAll classtext-danger/divdiv classform-grouplabel asp-forUsername/labelinput asp-forUsername classform-control /span asp-validation-forUsername classtext-danger/span/divdiv classform-grouplabel asp-forPassword/labelinput asp-forPassword classform-control typepassword /span asp-validation-forPassword classtext-danger/span/divdiv classform-groupdiv classcheckboxlabel asp-forRememberMeinput asp-forRememberMe /Html.DisplayNameFor(m m.RememberMe)/label/div/divbutton typesubmit classbtn btn-primaryLog in/button
/form
创建 LoginViewModel
创建一个 LoginViewModel用于绑定登录表单的数据
public classLoginViewModel
{[Required][Display(Name User name)]publicstring Username { get; set; }[Required][DataType(DataType.Password)][Display(Name Password)]publicstring Password { get; set; }[Display(Name Remember me?)]publicbool RememberMe { get; set; }
}
三、保护 API 路由
一旦配置了 Cookie 身份验证你可以使用 [Authorize] 特性来保护你的 API 路由确保只有经过身份验证的用户可以访问受保护的资源。
[Authorize]
public class ProtectedController : Controller
{ public IActionResult GetProtectedData(){return Ok(new { message This is protected data });}
}
四、客户端请求
客户端在请求受保护的 API 时浏览器会自动发送存储在 Cookie 中的身份验证数据。服务器会通过 Cookie 中间件验证这些数据的有效性并允许或拒绝请求。
五、登出逻辑
用户可以通过访问登出路径来登出。登出逻辑会清除用户的 Cookie从而结束会话。
[HttpPost]
[ValidateAntiForgeryToken]
public async TaskIActionResult Logout()
{await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);return RedirectToAction(Index, Home);
}
总结
通过以上步骤可以在 ASP.NET Core 应用中实现基于 Cookie 的身份鉴权确保你的应用能够安全地验证用户身份并授权访问特定资源。Cookie 的持久性和易于管理的特性使其成为传统 Web 应用中身份验证的理想选择。