Способы аутентификации в ASP.NET Core C#

ASP.NET Core предоставляет несколько способов аутентификации, позволяя выбирать наиболее подходящий механизм для защиты приложений.

Cookie-аутентификация

Cookie-аутентификация хранит информацию о пользователе в HTTP-cookie, что позволяет сохранять состояние пользователя между запросами.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
  .AddCookie(options =>
  {
      options.LoginPath = "/Account/Login";
      options.LogoutPath = "/Account/Logout";
  });

JWT-аутентификация

JWT (JSON Web Token) используется для аутентификации в API-приложениях, где состояние пользователя не сохраняется на сервере.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  .AddJwtBearer(options =>
  {
      options.TokenValidationParameters = new TokenValidationParameters
      {
          ValidateIssuer = true,
          ValidateAudience = true,
          ValidateLifetime = true,
          ValidateIssuerSigningKey = true,
          ValidIssuer = "yourdomain.com",
          ValidAudience = "yourdomain.com",
          IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))
      };
  });

OAuth 2.0 и OpenID Connect

OAuth 2.0 и OpenID Connect позволяют использовать сторонние сервисы для аутентификации, такие как Google, Microsoft или Facebook.

var builder = WebApplication.CreateBuilder(args);

builder.Services
  .AddAuthentication(options =>
  {
      options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
      options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
  })
  .AddCookie()
  .AddOpenIdConnect("oidc", options =>
  {
      options.Authority = "https://accounts.google.com";
      options.ClientId = "your_client_id";
      options.ClientSecret = "your_client_secret";
      options.ResponseType = "code";
  });

Windows-аутентификация

Windows-аутентификация полезна для корпоративных приложений, работающих в домене Windows.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();

Двухфакторная аутентификация

Двухфакторная аутентификация (2FA) добавляет дополнительный уровень безопасности, требуя ввода кода подтверждения.

var tokenProvider = new TotpSecurityStampBasedTokenProvider<IdentityUser>();
var isValid = await tokenProvider.ValidateAsync("TwoFactor", token, manager, user);

Аутентификация с помощью API-ключей

Используется для аутентификации сервисов через уникальные ключи API.

var apiKey = context.Request.Headers["X-Api-Key"];
if (apiKey == "your_api_key")
{
    // Аутентификация успешна
}