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身份验证方案。
posted @ 2024-06-25 15:30  七星飘虫  阅读(118)  评论(0)    收藏  举报