DefaultScheme和DefaultAuthenticateScheme的区别
services.AddAuthentication(options =>
{
// 默认使用Cookie方案
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
// 验证用户身份时使用JWT Bearer方案
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
// 处理身份验证挑战时使用JWT Bearer方案
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
// 配置Cookie身份验证的选项
options.LoginPath = "/Account/Login";
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
// 配置JWT Bearer身份验证的选项
options.TokenValidationParameters = new TokenValidationParameters
{
// 配置Token验证参数
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "yourissuer",
ValidAudience = "youraudience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yoursecretkey"))
};
});
-
用途不同:
DefaultScheme主要是为了设置应用程序全局的默认身份验证方案,适用于在没有明确指定身份验证方案时的默认选择。DefaultAuthenticateScheme则是用于具体的需要验证请求中用户身份时的操作,例如,授权策略或者访问受保护资源时。
-
配置时机不同:
DefaultScheme通常在应用程序启动时配置,用于整体(所有的没有配置的方案,最终会使用DefaultScheme方案,所有没有配置的方案包括DefaultAuthenticateScheme、DefaultChallengeScheme等,即DefaultScheme所有方案的默认侯选方案,相当于switch中的default)设定应用程序的默认行为。DefaultAuthenticateScheme则更关注在需要验证用户身份的具体操作中的使用,以确保使用适当的验证机制。
-
示例比较:
- 如果应用程序中大部分功能都依赖于Cookie身份验证,你会将
DefaultScheme设置为CookieAuthenticationDefaults.AuthenticationScheme,从而使得应用程序在没有明确指定身份验证方案时默认使用Cookie身份验证。 - 如果在某个特定的API端点需要验证JWT令牌,你会将
DefaultAuthenticateScheme设置为JwtBearerDefaults.AuthenticationScheme,这样ASP.NET Core会在需要验证用户身份时使用JWT Bearer身份验证方案。
- 如果应用程序中大部分功能都依赖于Cookie身份验证,你会将

浙公网安备 33010602011771号