📜  ASP.NET Core-身份配置(1)

📅  最后修改于: 2023-12-03 14:59:24.203000             🧑  作者: Mango

ASP.NET Core-身份配置

ASP.NET Core提供了很多用于身份验证和授权的选项。这些选项使得在应用程序中配置身份变得更加容易。在ASP.NET Core中,我们可以使用几种不同的方式来配置身份,

内置支持的认证方式

ASP.NET Core内置支持下面的认证方式:

  • Cookie-based authentication
  • JWT-based authentication
  • OAuth-based authentication
  • OpenID Connect-based authentication
基本设置

配置身份应该始终从输入验证开始。ASP.NET Core有一个内置的输入验证程序,用于检查在请求上收到的数据是否有效。在配置身份时,我们通常需要在实体身份模型中定义验证规则。我们还需要确定如何处理验证不通过的情况。

配置身份

以下是配置身份步骤的概要:

  1. 安装所需的NuGet包。ASP.NET Core默认情况下不安装身份验证和授权库,您需要手动安装它们。
  2. 在Startup类中调用app.UseAuthentication()方法,这会初始化身份认证中间件。
  3. 配置身份认证选项,例如Cookie的过期时间,Jwt token的有效期等.
  4. 配置授权,例如允许所有用户访问某个页面,仅允许特定用户进行某些操作等。
// 启用认证
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身份认证

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身份认证

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提供了很多默认的身份认证方式,您还可以根据您的需求添加自己的身份认证方式。授权的实现也是很容易的,您可以控制某个操作接口是哪个角色可以访问,以及是否经过身份验证。参考上面的示例,您可以加快实现身份认证和授权相关的开发速度。