О процедурах идентификации, аутентификации и авторизации

Многие пользователи сети Интернет, в том числе и веб-разработчики, не знают различия в терминах «идентификация», «аутентификация» и «авторизация», обособляя их одним словом — «авторизация». Поэтому, вопрос о теме вводной статьи, открывающей серию статей об аутентификации и авторизации в современных веб-приложениях, передо мной не стоял. В вступительной «речи» изложено моё понимание темы, подкреплённая простым примером.

Когда ваш сайт перестаёт быть набором статичных страниц, и приходится ограничивать доступ к определённым функциям или данным, для некоторого лица или группы лиц, встаёт вопрос о необходимости организовать процедуры проверки полномочий. Мы не можем без билета и паспорта сесть в самолёт и добраться до желаемого места. Нас никто не пустит в театр, если мы не предоставим приобретённый билет. Вы даже не можете воспользоваться общественной библиотекой без предоставления библиотечной карточки. Это всё из одной серии и процедуры, указанные в заголовке статьи, призваны для реализации таких систем.

Идентификация

«Идентификация» — процедура, в результате которой, выявляется идентификатор субъекта(пользователя), однозначно идентифицирующий его в системе.

Например, Марат Даллин, зарегистрировался на Backend-конференцию, в секции «Тенденции развития PHP» и «Elasticsearch в высоконагруженных приложениях», которая будет проводится, в ближайшее время, на острове Кинг-Уильям, указав свои паспортные данные. После завершения регистрации, Марату был выдан бейджик, на котором указаны его имя и идентификационный номер. В назначенный день, при входе в здание, в котором будет проводится конференция, Марат показывает свой бейджик сотруднику регистрационного отдела, который ищет данный идентификатор в базе зарегистрированных пользователей. Если идентификатор будет найден, значит субъект однозначно идентифицирован в системе. Но это пока не значит, что Марат имеет право посетить конференцию, так как бейджик он мог найти или, хуже всего, украсть. Поэтому, ему нужно доказать, что он тот, за кого себя выдает. За это уже отвечает процедура аутентификации.

Аутентификация

«Аутентификация» — процедура проверки подлинности идентифицированного субъекта(пользователя).

При регистрации на конференцию, Марат указал свои паспортные данные (серию и номер). Сотрудник регистрационного отдела проверяет серию и номер в паспорте Марата, с указанными паспортными данными при регистрации. При совпадение данных, Марат успешно проходит аутентификацию и может быть допущен на конференцию.

Процедуры идентификации и аутентификации напрямую связаны, поэтому, при разработке программных решений их объединяют в единый инструмент. Но знать различие между этими процедурами обязательно.

Авторизация

«Авторизация» — процедура предоставления субъекту(пользователю) или группе субъектов прав на выполнение определенных действий.

На конференции, параллельно, введутся множество секций, доступ к которым резервируется на этапе регистрации. После успешного прохождения аутентификации, сотрудник регистрационного отдела напоминает Марату, что он имеет право посетить только секции «Тенденции развития PHP» и «Elasticsearch в высоконагруженных приложениях» (секции, отмеченные при регистрации). К остальным секциям для Марата доступ запрещён.

Техническая реализация

Применительно к веб-технологиям, стоит рассмотреть принципы работы социальных сетей. Например, при регистрации в «Facebook», пользователь указывает адрес электронной почты и пароль. В последующем, эти данные используются для идентификации и аутентификации в системе.

При входе в систему, производится поиск учётной записи пользователя, в базе данных, по адресу электронной почты. Если поиск завершён успешно, значит учётная запись идентифицирована. Успешное завершение этапа сверки паролей подтверждает аутентификацию пользователя в системе.

Технологий реализации процедуры авторизации огромное количество(впрочем как и процедуры аутентификации), например ACL (Access Control List). Такие списки содержат информацию о функциях, объектах и данных, доступ к которым необходимо разрешить или запретить определённому пользователю или группе пользователей.

Сохранение состояния

Веб-технологии базируются на протоколе передачи гипертекста HTTP, основанный на технологии «клиент-сервер». Одним из недостатков данного протокола заключается в отсутствие возможности сохранения состояния. Это значит, что каждый запрос клиента к северу не связан с предыдущи запросом. Для сохранения состояния, используется механизм Session. После успешной аутентификации пользователя, на сервере создаётся уникальный идентификатор, передаваемый клиенту в Cookie. Последующие запросы к серверу дополняются выданным Cookie, исключающий необходимость повторного ввода идентификационных данных. Сохранение состояние с помощью механизма Session используется во множестве типов аутентификации, например, в аутентификации с помощью HTML форм.

Так же, стоит упомянуть о типах аутентификации без сохранения состояния, которые регулярно используются в создание API сервисов. К таким относятся Basic, Digest, JWT и многие другие объекты аутентификации.

Заключение

Данная статья представляет из себя субъективное мнение, базирующееся только на личном опыте. Допускаю ошибки и недочёты в моих рассуждениях. Может быть и так, что я сильно заблуждаюсь. В любом случае, речь в статье не о мифических объектах, а о конкретных процедурах, с которыми вы дополнительно можете ознакомиться на авторитетных ресурсах, подкреплённых документацией из первоисточников.