Предисловие

Ох, благодатный пост. Как же у меня горит от тех людей, которые не понимают разницу. А ведь всё очень просто! Давайте разберёмся.

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

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

По-английски будет “identification”. Это процесс определения идентичности или индивидуальности.

Что это значит для нас, простых студентов филфака МГУ программистов?

Идентичность и индивидуальность объекта позволяют нам отличить этот объект от любых других.

Например, есть десять экзаменационных листов. Сами по себе листы одинаковые, распечатаны на одном принтере в одно и то же время. Что может их отличать? Например, номер (если такой на листе есть). Или, если по номеру идентифицировать лист мы не можем, то имя и фамилия экзаменующегося (написанные на этом листе) могут служить идентификационными данными.

Другой пример. Группа анонимных фронтендеров алкоголиков. На встрече такой группы каждый называет какое-то имя (не обязательно при этом совпадающее с паспортным). В этой группе все будут друг друга различать по этим именам. Ну, там, Вася, Петя, Крис, Дэвид.

Живой пример из мира IT: идентификатор сессии google analytics. При попадании любого браузера в поле действия google analytics этому браузеру назначается идентификатор, по которому этот браузер будет на стороне GA отличаться от миллиардов других.

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

По-английски будет “authentication”. Это процесс определения аутентичности или подлинности.

С объяснением аутентичности уже посложнее, чем с идентичностью. Определение подлинности позволяет нам определить (ух, какой у меня красивый слог-то, а), что какой-то объект является тем, за кого он себя выдаёт.

Всё тот же пример с экзаменационными листами. Как нам подтвердить, что лист, на коротом написано “Крис Маккорд” действительно заполнен Крисом? Мне известен только один способ: экспертиза почерка. Если почерк на этом листе полностью соответствует почерку Криса, то этот лист действительно заполнил он, а не кто-то другой.

Другой пример. Группа (не)анонимных алкоголиков фронтендеров. Как мы можем утверждать, что пришедший на встречу человек является Дэном Абрамовым (а вот этот весёлый парень в кепке представился именно им)? Например, проверить его паспорт. И если там написано “Дэн Абрамов” (ну и совпадают серия, номер, что там ещё), то этот человек в кепке — точно Дэн Абрамов.

Живой пример из мира IT: пароль и логин на форме входа в google account. Если логин является открытой информацией, то пароль — закрытой. И только тот, кто создавал аккаунт, знает этот самый пароль. С помощью пароля он подтверждает свою аутентичность как владельца аккаунта.

Куда более интересная для изучения аутентификация, например.

Разница между идентификацией и аутентификацией

Если непонятно, чем отличается идентификация от аутентификации, то я попробую в этом пункте разъяснить.

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

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

Являются ли аутентификационные данные идентификационными? Да. Если мы можем проверить аутентичность (оригинальность), то мы можем проверить и идентичность (индивидуальность). Но у вас в базе всё равно же есть user_id, так что зачем светить везде пароль =)

Авторизация

Вот если с разницей идентификации и аутентификации вопрос достаточно тонкий, то не различать аутентификацию и авторизацию — моветон. Я бы даже сказал, что это — грех для тех, кто работает в области IT.

Что же такое авторизация?

Обратимся к английскому варианту — “authorization”, однокоренным словом которого является “authority” — “власть” или “полномочие”.

То есть “авторизация” — процесс определения полномочий объекта.

“Могу ли я узнать состояние счёта в банке Валентина — могу”, — вот типичный процесс авторизации. А вот на вопрос “а действительно ли я тот самый Валентин” будет отвечать уже аутентфикация.

Пример с экзаменационными листами. Кто имеет право проверять экзаменационные листы? Только учитель (ну или проверяющий в случае ЕГЭ).

Другой пример. Кто имеет право отправлять коммиты в репозиторий группы (не)анонимных алкоголиков фронтендеров? Только владелец соответствующего аккаунта на гитхабе.

Живой пример из мира IT: может ли пользователь с ролью “редактор” удалить запись другого пользователя с ролью “редактор”? Нет. Это может сделать только пользователь с ролью “администратор”.

Заключение

Я считаю, что всё это нужно хорошо понимать как говнокодерам инженерам, так и фронтендерам людям, не пишущим код. Чтобы при возникновении проблем в идентификации, аутентификации и авторизации общение происходило на одном языке, понятном всем.

Поэтому пройдусь по списку ещё раз:

  • Идентификация отвечает на вопрос “кто это такой?”
  • Аутентификация отвечает на вопрос “он точно тот, за кого себя выдаёт?”
  • Авторизация отвечает на вопрос “что ему позволено делать?”