Идентификация, аутентификация и авторизация – это 3 последовательно идущих друг за другом шага, которые позволяют пользователю получить доступ куда-либо или к чему-либо. Увы, эти слова похожи по звучанию, поэтому многие их путают. Это может стать проблемой для начинающего разработчика – если вы получите баг-репорт о баге в аутентификации и пойдете искать ошибку в модуле авторизации, то в лучшем случае вы бесполезно потратите время. Ниже – краткое объяснение разницы между всеми этими терминами.
У нас есть сайт, в ЛК которого можно зайти по логину и одноразовому паролю из СМС. Допустим, пользователь хочет зайти в личный кабинет на сайте. Что он сделает? Зайдет на сайт и введет свой логин в специальную форму, после чего нажмет на кнопку «Получить код». Введение пользователем своего логина и посылка запроса с логином от клиента к серверу – это идентификация. В рамках идентификации мы проверяем, есть ли вообще такой пользователь – или вдруг кто-то пытается войти в ЛК по несуществующему логину. Никаких других действий мы пока не проводим – только убеждаемся, что пользователь вообще есть.
Когда мы убедились, что такой пользователь существует – пора узнать, пытается ли войти в систему именно тот человек, которому принадлежит учетная запись. Способов проверки существует множество, но у нашего выдуманного сайта соответствие проверяется по коду из СМС – если неизвестный нам пока человек ввел код, который мы отправили на телефон владельца аккаунта, значит этот неизвестный человек, скорее всего, и является владельцем. Весь этот процесс называется аутентификацией – мы проверяем, является ли запрашивающий доступ к аккаунту владельцем аккаунта.
Если аутентификация прошла успешно (мы убедились, что имеем дело с владельцем), то человека нужно впустить в его личный кабинет – установить безопасное соединение, подтянуть персональную информацию из базы данных, сформировать страницу ЛК и так далее. Все это называется авторизацией – мы даем доступ идентифицированному и аутентифицированному пользователю.
Тут все просто – сейчас в 99% случаях для идентификации используют логин, номер телефона или аккаунт в соцсетях. Иногда встречается идентификация по биометрии – отпечаток пальца, распознавание лица.
Аутентификация – самый сложный и опасный процесс во всей цепочке. Есть 3 основных подхода к аутентификации:
Вариантов аутентификации – много: пароль, телефон, почта, аккаунты в соцсетях и так далее. Что более важно – аутентификация может быть многоэтапной. Если мы просим только ввести пароль – это однофакторная аутентификация; если мы просим ввести пароль и код из СМС – двухфакторная аутентификация; если ко всему этому еще нужно подтвердить личность отпечатком пальца – многофакторная аутентификация. Лучшей защитой в большинстве случаев считается двухфакторная аутентификация.
Конкретная технология авторизации во многом зависит от проекта – это могут быть настроенные роли, веб-токены, security assertion, OAuth и так далее.
Пользователю, естественно, без разницы, на какой он сейчас фазе – ему нужно получить доступ в личный кабинет. А вот для кибербезопасника знание разницы между идентификацией/аутентификацией/авторизацией – базовое знание, потому что каждый шаг этого процесса для такого специалиста имеет свое значение и обладает своими уязвимостями. Разработчикам знать о разнице между этими шагами тоже бывает полезно: теперь вы, например, будете знать, что идентификация и аутентификация – разные вещи, поэтому при проектировании процесса входа в ЛК для работы или своего пет-проекта вы разнесете функционалы идентификации и аутентификации по разным модулям, что существенно облегчит масштабирование в дальнейшем.