.net6mvc 添加cookie身份验证
在 .NET 6 MVC 应用程序中,可以使用 Cookie 身份验证方案为用户提供身份验证功能。要添加 Cookie 身份验证,需要遵循以下步骤:
步骤 1:在 Startup.ConfigureServices 方法中配置身份验证和授权服务。
public void ConfigureServices(IServiceCollection services)
{
...
// 添加身份验证服务
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; // 设置默认身份验证方案为 Cookie
})
.AddCookie(options =>
{
options.Cookie.Name = "YourApplicationCookie"; // 设置cookie名称
options.LoginPath = "/Account/Login"; // 设置未经授权用户在尝试访问需要授权的路径时要重定向的URL
options.LogoutPath = "/Account/Logout"; // 设置注销的URL
});
// 添加授权服务
services.AddAuthorization();
...
}
步骤 2:在 Startup.Configure 方法中启用身份验证和授权中间件。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
// 启用身份验证和授权中间件
app.UseAuthentication();
app.UseAuthorization();
...
}
步骤 3:在 AccountController 中添加登录和注销 Action。
public class AccountController : Controller
{
...
[HttpGet]
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await _userService.AuthenticateAsync(model.UserName, model.Password);
if (user != null)
{
// 创建身份验证票据
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Name, user.UserName)
};
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
// 发送身份验证票据
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity));
// 重定向到 returnUrl 或 特定页面
if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError(string.Empty, "用户名或密码不正确。");
}
}
return View(model);
}
[HttpPost]
public async Task<IActionResult> Logout()
{
// 注销身份验证票据
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
// 重定向到登录页面
return RedirectToAction("Login", "Account");
}
}
在登录 Action 中,当用户通过身份验证时,会创建并发送包含用户身份信息的 cookie。在注销 Action 中,cookie 会被删除。
步骤 4:将 [Authorize] 特性添加到需要授权的 Action 或 Controller 中。
在需要授权的地方,可以将 [Authorize] 特性添加到 Action 或 Controller 上。例如:
[Authorize]
public class MyController : Controller
{
...
}
public class HomeController : Controller
{
public IActionResult Index()
{
...
}
[Authorize]
public IActionResult Secret()
{
...
}
}
在此示例中,MyController
中的所有 Action
都需要身份验证,而 HomeController
中的 Index Action
不需要身份验证,但 Secret Action
需要身份验证才能访问。