ASP.NET Core支持多重身份验证,您可以通过以下步骤实现:
ConfigureServices
方法中,添加身份验证服务及其选项。例如,可以添加基于Cookie的身份验证和基于JWT的身份验证:public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
options.AccessDeniedPath = "/Account/AccessDenied";
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
services.AddControllersWithViews();
// 其他服务配置...
}
Configure
方法中,使用身份验证中间件,并设置身份验证方案。例如,可以使用Cookie身份验证和JWT身份验证:public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 中间件配置...
app.UseAuthentication();
app.UseAuthorization();
// 其他中间件配置...
}
HomeController
控制器和一个Index
视图:[Authorize] // 添加身份验证特性
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
@{
ViewData["Title"] = "Home";
}
Welcome to Home Page
This page requires authentication.
Login
视图和一个Login
动作方法:public class AccountController : Controller
{
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task Login(LoginViewModel model)
{
// 验证用户凭据
if (ModelState.IsValid)
{
if (await Authenticate(model.Username, model.Password))
{
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "Invalid username or password");
}
return View(model);
}
private async Task Authenticate(string username, string password)
{
// 执行身份验证逻辑
// 返回true表示验证成功,返回false表示验证失败
}
}
@model LoginViewModel
@{
ViewData["Title"] = "Login";
}
Login
请注意,上述示例仅提供了基本的框架和概念,您需要根据自己的需求进行进一步的实现和调整。