Слова «идентификация», «аутентификация» и «авторизация» часто звучат вместе, когда речь заходит о безопасности приложений. Новички нередко путают эти термины или используют их как синонимы, что в корне неверно. Понимание разницы между ними — это фундамент, на котором строится надежная защита любой информационной системы.
В этой статье мы разберем каждый из процессов на простых жизненных примерах, посмотрим, как они реализуются в коде, и выясним, почему для безопасности важны все три шага.
Что такое Идентификация и для чего она нужна?
Идентификация - это процесс, при котором пользователь заявляет системе о том, кто он такой. Система в этот момент просто принимает заявленный идентификатор (логин) и проверяет, существует ли он в базе данных.
Представьте, что вы приходите на проходную бизнес-центра и говорите охраннику: «Я — Иван Иванов». В этот момент вы прошли идентификацию. Охранник посмотрел в список и увидел, что Иван Иванов действительно работает в одной из компаний. Но он еще не знает, что вы — это именно тот самый Иван.
В цифровом мире идентификатором может быть:
- Логин или никнейм,
- Адрес электронной почты,
- Номер телефона.
Идентификация это первая ступень трехэтапного процесса в безопасности для работы с самой системой. Запомните, идентификация отвечает на вопрос “Кто вы?”.
Вот как выглядит процесс идентификации на Python с использованием библиотеки Pydantic для валидации данных:
from pydantic import BaseModel, EmailStr
class UserIdentify(BaseModel):
email: EmailStr
def identify_user(user_data: UserIdentify) -> bool:
# Имитация базы данных
database = ["admin@example.com", "user@example.com"]
if user_data.email in database:
print(f"Пользователь с email {user_data.email} найден.")
return True
print("Пользователь не найден.")
return False
# Идентификация
identify_user(UserIdentify(email="user@example.com"))
Аутентификация: ваши доказательства?
Аутентификация — это процесс проверки подлинности заявленного идентификатора. Система требует доказательств того, что вы действительно тот, за кого себя выдаете.
Возвращаясь к нашему примеру с бизнес-центром: после того как вы назвали имя, охранник просит вас показать паспорт. Он сверяет фотографию в документе с вашим лицом. Если всё совпадает — вы успешно прошли аутентификацию.
Доказательствами (факторами) аутентификации выступают уникальные данные или предметы, которыми владеет пользователь. Их принято делить на три основные категории:
- То, что вы знаете: пароль, пин-код, кодовое слово.
- То, что вы имеете: физический токен, телефон (для SMS-кода), смарт-карта.
- То, чем вы являетесь: биометрия (отпечаток пальца, скан лица, сетчатка глаза).
Для надежной защиты часто используют двухфакторную аутентификацию (2FA), комбинируя два разных типа доказательств. Например, пароль (то, что вы знаете) и код из SMS (то, что вы имеете).
Аутентификация отвечает на вопрос “Действительно ли вы тот, за кого себя выдаете?” или “Докажи, что ты — это ты?”.
В современных приложениях после успешной аутентификации сервер часто выдает пользователю специальный токен (например, JWT), который подтверждает его личность при последующих запросах.
Рассмотрим простой пример аутентификации с пользованием пароля на Python.
import hashlib
# Хэшированный пароль в базе (в реальности используется bcrypt или Argon2).
USER_DB = {
"user@example.com": hashlib.sha256(b"secret_password").hexdigest()
}
def authenticate_user(email: str, password: str) -> bool:
if email not in USER_DB:
return False
password_hash = hashlib.sha256(password.encode()).hexdigest()
if USER_DB[email] == password_hash:
print("Аутентификация успешна. Добро пожаловать!")
return True
print("Неверный пароль.")
return False
success = authenticate_user("user@example.com", "secret_password")
if not success:
raise Exception("Дальше путь закрыт")
Авторизация: сэр, вам запрещено это делать
Авторизация — это процесс наделения пользователю, группе или системе прав на выполнение определенных действий или доступ к определенным ресурсам.
В примере с бизнес-центром: вы показали паспорт (прошли аутентификацию), и охранник выдал вам пропуск. Но ваш пропуск дает право пройти только на третий этаж, в офис вашей компании. Если вы попытаетесь зайти в серверную на первом этаже, система контроля доступа вас не пустит. Это и есть авторизация в действии.
Авторизация всегда происходит после аутентификации. Если система не знает, кто вы, она не может решить, какие у вас права. Авторизация отвечает на вопрос: «Имеет ли этот пользователь право делать это?».
Авторизацию часто реализуют через роли (Role-Based Access Control, RBAC) или через права доступа.
from enum import Enum
from typing import List
class Role(Enum):
ADMIN = "admin"
USER = "user"
class User:
def __init__(self, email: str, roles: List[Role]):
self.email = email
self.roles = roles
# Действие с проверкой, кто может совершить это злодияние.
def delete_database(user: User):
if Role.ADMIN in user.roles:
print("База данных успешно удалена. Надеюсь, что у вас имеются бекапы.")
else:
print("Ошибка доступа — требуются права администратора (Авторизация отклонена).")
# Пользователи, которые прошли Аутентификацию.
admin_user = User(email="admin@example.com", roles=[Role.ADMIN])
regular_user = User(email="user@example.com", roles=[Role.USER])
# Пользователи, которые хотят выполнить действие
delete_database(admin_user) # Пройдет успешно
delete_database(regular_user) # Ошибка доступа
Почему важны все три этапа
Пропуск хотя бы одного из этих этапов ведет к критическим уязвимостям.
- Без идентификации система вообще не знает, с кем работает.
- Без аутентификации любой злоумышленник может назваться администратором.
- Без надежной авторизации даже аутентифицированный пользователь сможет получить доступ к чужим личным данным или системным настройкам.
Грамотное разделение этих понятий при проектировании архитектуры помогает создавать безопасные приложения, в которых данные надежно защищены от несанкционированного доступа. Всегда проверяйте права на уровне сервера (авторизация), используйте надежные алгоритмы хэширования (аутентификация) и не доверяйте данным, приходящим от клиента.
Если вы хотите узнать, как современные приложения «запоминают» аутентифицированных пользователей без использования тяжелых сессий, рекомендуем прочитать нашу следующую статью: Что такое JWT токен — Как работает авторизация без сессий.