Какие бывают схемы аутентификации с токенами и без токенов
Что проверяют
Понимаете ли вы, где хранится состояние входа: на сервере или в самом токене, и что из этого следует для масштабирования, отзыва доступа и защиты. Следом обычно спрашивают, как это настраивается в ASP.NET Core и как отозвать JWT до истечения срока.
Как отвечать
Разделите схемы по тому, что клиент предъявляет в каждом запросе:
- Basic: логин и пароль в заголовке
Authorizationв Base64, это кодирование, а не шифрование. Допустима только поверх HTTPS для служебных интеграций, готового обработчика в ASP.NET Core нет, пишется свойAuthenticationHandler<TOptions>. Digest сейчас почти не встречается; - Windows (Kerberos, NTLM):
AddNegotiate(), удобно во внутренней сети с доменом; - клиентский сертификат (mTLS):
AddCertificate(), для связи между сервисами; - cookie:
AddCookie(). Нюанс: по умолчанию ASP.NET Core кладёт в cookie весь зашифрованный тикет с claims через Data Protection, а хранение на сервере включается черезSessionStore(ITicketStore); - JWT Bearer:
AddJwtBearer(), токен подписан, сервер проверяет подпись, издателя, аудиторию и срок, не обращаясь к хранилищу; - непрозрачный токен: случайная строка, сервер проверяет её у себя или через introspection. Отзывается мгновенно, но требует хранилища;
- OAuth 2.0 и OpenID Connect: OAuth про делегирование доступа, аутентификацию поверх него даёт OIDC (
AddOpenIdConnect(),id_token). Для SPA и мобильных клиентов рекомендуют Authorization Code с PKCE, неявный поток считается устаревшим.
Закончите выбором: браузерное приложение на своём домене надёжнее держать на cookie с HttpOnly и SameSite, публичный API и микросервисы на JWT с коротким сроком жизни и refresh-токеном.
Где спотыкаются
Называют JWT зашифрованным. Обычный JWT только подписан, payload читается любым, поэтому класть туда персональные данные нельзя.
Путают аутентификацию и авторизацию и называют OAuth 2.0 протоколом входа. Без OIDC это выдача прав на ресурс, а не ответ на вопрос «кто вы».
Не могут объяснить отзыв JWT. Ответ: короткий срок жизни access-токена, ротация refresh-токенов, при необходимости чёрный список по jti или версия токена в профиле пользователя.