.net 身份验证与鉴权.md
### .NET CORE AddAuthentication
在 .NET Core 中,可以使用 `AddAuthentication` 方法来向应用程序添加身份验证服务。该方法是 Microsoft.AspNetCore.Authentication 命名空间中的一个扩展方法,用于配置身份验证的选项和处理程序。
以下是一些常见的身份验证流程,以及如何使用 `AddAuthentication` 方法进行配置:
1. 使用 Cookie 身份验证:Cookie 身份验证是最常见的身份验证机制之一,它允许用户在应用程序中保持登录状态。如果需要使用 Cookie 身份验证,可以使用 `AddCookie` 方法执行以下配置:
```csharp
services.AddAuthentication(config =>
{
config.DefaultScheme = "UserAuth";
config.DefaultSignInScheme = "UserAuth";
config.DefaultSignOutScheme = "UserAuth";
config.RequireAuthenticatedSignIn = true;
})
.AddCookie("UserAuth", options =>
{
options.Cookie.Name = "MyAppCookie";
options.LoginPath = "/Account/Login";
options.LogoutPath = "/Account/Logout";
options.AccessDeniedPath = "/Error/AccessDenied";
});
```
在上述代码中,我们首先使用 `DefaultScheme`、`DefaultSignInScheme` 和 `DefaultSignOutScheme` 配置默认的身份验证方案和登录/注销方案,然后使用 `RequireAuthenticatedSignIn` 强制要求所有请求都必须进行身份验证。最后调用 `AddCookie` 方法并设置相关选项,例如 Cookie 名称、登录/注销路径和拒绝访问路径等。
2. 使用 JWT 身份验证:JWT(JSON Web Token)是一种轻量级的身份验证机制,它可以在客户端和服务器之间传递安全的身份验证信息。如果需要使用 JWT 身份验证,可以使用 `AddJwtBearer` 方法执行以下配置:
```csharp
services.AddAuthentication(config =>
{
config.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
config.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.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:SecretKey"]))
};
});
```
在上述代码中,我们首先使用 `DefaultAuthenticateScheme` 和 `DefaultChallengeScheme` 设置默认的身份验证和挑战方案,然后调用 `AddJwtBearer` 方法并设置相关选项,例如 JWT 配置参数、Token 验证参数等。
以上是 AddAuthentication 方法的两个示例用法,具体实现可能因需求而异,需要根据实际情况进行调整和修改。
### .NET CORE AddIdentityCore
在 .NET Core中,可以使用 `AddIdentityCore` 方法来向应用程序添加身份认证服务。该方法是 Microsoft.AspNetCore.Identity 命名空间中的一个扩展方法,用于配置身份认证的选项和处理程序,包括用户存储、密码哈希、角色管理等。
以下是使用 `AddIdentityCore` 方法进行配置的示例:
```csharp
services.AddIdentityCore<ApplicationUser>(options =>
{
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequireLowercase = true;
options.Password.RequireUppercase = true;
options.Password.RequireNonAlphanumeric = false;
})
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddSignInManager<SignInManager<ApplicationUser>>()
```
在上述代码中,我们首先通过调用 `AddIdentityCore` 方法并设置相关选项进行身份认证的配置,例如密码复杂度要求等。然后通过调用 `AddRoles` 方法和 `AddEntityFrameworkStores` 方法来配置用户角色管理和用户存储,这里使用了 Entity Framework Core 来作为用户数据的持久化存储方式。最后通过调用 `AddSignInManager` 方法来配置登录管理器,并将其添加到服务集合中。
需要注意的是,如果需要更加复杂的身份认证和授权功能,可以考虑使用 `AddIdentity` 方法代替 `AddIdentityCore`。`AddIdentity` 方法会自动引入其他依赖项,例如 ASP.NET Identity UI、身份认证页面、电子邮件验证等,可供快速使用。
以上是 AddIdentityCore 方法的示例用法,具体实现可能因需求而异,需要根据实际情况进行调整和修改。
### .NET CORE AddIdentityCore 与 AddAuthentication的区别
在 .NET Core 中,`AddIdentityCore` 方法和 `AddAuthentication` 方法都是用于身份验证的方法,但它们之间有一些区别:
1. 功能不同:`AddIdentityCore` 方法主要用于添加身份认证服务,并提供用户存储、密码哈希、角色管理等功能;而 `AddAuthentication` 方法则主要用于添加身份验证服务,并允许使用多种不同的身份验证方案,例如 Cookie、JWT 等。
2. 依赖项不同:`AddIdentityCore` 方法通常需要依赖 Entity Framework Core 或其他数据持久化机制来进行用户数据的存储,这需要使用 `AddEntityFrameworkStores` 方法进行配置;而 `AddAuthentication` 方法并没有类似的依赖项,它可以与任何数据存储机制一起使用。
3. 配置选项不同:`AddIdentityCore` 方法提供了更多的身份认证相关的配置选项,例如密码复杂度要求、密码策略、锁定策略等;而 `AddAuthentication` 方法则主要用于配置身份验证方案和处理程序,例如 Cookie 名称、JWT 配置参数等。
需要注意的是,这两个方法可以一起使用,以实现更完整的身份验证和授权功能。例如可以先调用 `AddIdentityCore` 方法来添加身份认证和用户存储服务,然后调用 `AddAuthentication` 方法来添加身份验证方案,例如 Cookie 或 JWT。最终可以通过 ASP.NET Core 的中间件管道来将它们连接起来,实现完整的身份验证和授权功能。
注:2024-12-06 from compute/SKY-20200215ZJX old document
浙公网安备 33010602011771号