Что такое аутентификация (authentication)?

«Что такое аутентификация (authentication)?» — вопрос из категории Безопасность, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Аутентификация — это процесс проверки подлинности субъекта (пользователя, системы или устройства), обычно путём подтверждения его учётных данных (credentials).

Простыми словами: Ответ на вопрос "Кто ты?".

Основные методы аутентификации:

  1. По знаниям (Something you know): Логин и пароль, PIN-код.
  2. По владению (Something you have): Ключ-токен, смарт-карта, мобильное устройство (код из SMS/приложения).
  3. По свойству (Something you are): Биометрия (отпечаток пальца, сканирование лица).

Пример реализации в Spring Security:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(authz -> authz
                .requestMatchers("/admin/**").hasRole("ADMIN")
                .requestMatchers("/user/**").authenticated()
                .anyRequest().permitAll()
            )
            .formLogin(Customizer.withDefaults()) // Форма логина
            .httpBasic(Customizer.withDefaults()); // Или HTTP Basic Auth
        return http.build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        // Источник данных о пользователях (в памяти, БД, LDAP)
        UserDetails user = User.withUsername("user")
            .password(passwordEncoder().encode("pass"))
            .roles("USER")
            .build();
        return new InMemoryUserDetailsManager(user);
    }
}

Аутентификация vs Авторизация:

  • Аутентификация (Authentication): Кто ты? — Установление личности.
  • Авторизация (Authorization): Что тебе разрешено? — Проверка прав доступа к ресурсам.

Аутентификация всегда предшествует авторизации.