📅  最后修改于: 2023-12-03 14:59:24.203000             🧑  作者: Mango
ASP.NET Core提供了很多用于身份验证和授权的选项。这些选项使得在应用程序中配置身份变得更加容易。在ASP.NET Core中,我们可以使用几种不同的方式来配置身份,
ASP.NET Core内置支持下面的认证方式:
配置身份应该始终从输入验证开始。ASP.NET Core有一个内置的输入验证程序,用于检查在请求上收到的数据是否有效。在配置身份时,我们通常需要在实体身份模型中定义验证规则。我们还需要确定如何处理验证不通过的情况。
以下是配置身份步骤的概要:
// 启用认证
app.UseAuthentication();
// 添加认证选项
services.Configure<AuthenticationOptions>(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});
// 添加授权选项
services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly",
policy => policy.RequireRole("Admin"));
});
Cookie身份认证是ASP.NET Core身份认证中最常见的方式。下面的示例演示了如何配置和使用Cookie身份认证。
在Startup类的ConfigureServices方法中注册Cookie身份验证
// 注册Cookie身份验证
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/account/login";
options.LogoutPath = "/account/logout";
options.AccessDeniedPath = "/account/accessdenied";
});
在Configure方法中使用Cookie身份验证中间件
// 添加Cookie身份认证中间件
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
LoginPath = new PathString("/Account/Login"),
AccessDeniedPath = new PathString("/Account/AccessDenied"),
AutomaticAuthenticate = true,
AutomaticChallenge = true
});
JWT身份认证是一种更加安全的机制,它使用JSON Web Token (JWT)来验证用户身份。下面的示例演示了如何配置和使用JWT身份认证。
在ConfigureServices方法中注册JWT身份验证
// 注册JWT身份验证
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidIssuer = Configuration["JwtIssuer"],
ValidAudience = Configuration["JwtAudience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtKey"]))
};
});
在Configure方法中使用JWT身份认证中间件
// 添加JWT身份认证中间件
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidIssuer = Configuration["JwtIssuer"],
ValidAudience = Configuration["JwtAudience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtKey"]))
}
});
授权是为了限制用户访问应用程序的某些部分或操作。ASP.NET Core中的授权类似于身份验证,但是它更侧重于限制用户访问应用程序中的不同部分和操作。
使用下面的示例为特定角色添加授权:
// 添加授权选项
services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly",
policy => policy.RequireRole("Admin"));
});
在HomeController中的方法上附加授权属性:
[Authorize(Policy = "AdminOnly")]
public IActionResult AdminOnly()
{
return View();
}
ASP.NET Core使得配置身份变得更加容易。配置身份的基本设置需要在输入验证、身份认证和授权方面很好的组合,以确保您的应用程序安全。ASP.NET Core提供了很多默认的身份认证方式,您还可以根据您的需求添加自己的身份认证方式。授权的实现也是很容易的,您可以控制某个操作接口是哪个角色可以访问,以及是否经过身份验证。参考上面的示例,您可以加快实现身份认证和授权相关的开发速度。