Тема 11: Аутентификация в HTTP. Проверка подлинности пользователей в HTTP

Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике Серверы и протоколы и ее разделе HTTP протокол. Их этой записи ты узнаешь, как реализована аутентификация клиентов на сервере в HTTP протоколе и как происходит проверка подлинности клиента, так же мы с тобой рассмотрим как происходит базовая аутентификации клиента на сервере.

Аутентификация в HTTP. Проверка подлинности в HTTP

Аутентификация в HTTP. Проверка подлинности в HTTP


Проверка подлинности доступа в HTTP

В протоколе HTTP реализован механизм аутентификации или проверки подлинности клиента. Аутентификация в HTTP довольно простая: для проверки подлинности используются, как всегда, HTTP запросы от клиента и HTTP ответы от сервера, но со специальными полями заголовка. Очень подробно про аутентификацию в HTTP написано в документе RFC 2617, мы же с вами поговорим про общие детали проверки подлинности клиента в HTTP.

Для проверки подлинности у HTTP сервера есть специальный механизм, который по-русски называется вызов-ответ, по-английски: challenge-response. Сервер может применить этот механизм чтобы вызвать (получить) от клиента HTTP сообщение, в котором будут содержаться данные для аутентификации клиента. Механизм вызов-ответ по сути – это набор полей HTTP заголовка и, как и любое другое поле, поля установления подлинности в HTTP имеют атрибуты и значения, одно поле может иметь несколько значений, которые разделяются запятой и не чувствительны к регистру символов.

Помните мы рассматривали коды ошибок HTTP клиента и там был код 401, который означал не аутентифицирован? Так вот, данный код используется для «активации» механизма аутентификации в HTTP, этим кодом сервер просит клиента предоставить данные для проверки подлинности HTTP. При этом HTTP ответ сервера должен содержать поле заголовка WWW-Authenticate.

Атрибут realm не чувствительный к регистру и необходим для установления подлинности в HTTP при всех вызовах. А вот значение данного атрибута к регистру чувствительно и вместе с URL сервера (читай про URI в HTTP), на который был направлен запрос клиента, определяет область или пространство защиты. Таким образом HTTP сервер может создавать пространства защиты, к каждому из которых, могут быть применены различные способы установления подлинности клиента.

Обычно для установления подлинности клиент использует поля заголовка Authorization, которое включает в запрос после того, как он получил код состояния 401. Значения поля Authorization состоят из так называемых рекомендаций (credentials), в этих самых рекомендациях содержится информация для аутентификации HTTP клиента.

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

Если HTTP серверу «не понравятся» рекомендации клиента, то он возвращает код состояния 401. Однако стоит заметить, что стандарт протокола HTTP никак не ограничивает HTTP приложения: то есть приложениям не обязательно для аутентификации использовать механизм запрос-ответ для подтверждения подлинности.

Базовая схема аутентификации в HTTP

Базовая схема аутентификации в HTTP реализована по принципу: логин-пароль. Клиент высылает серверу логин и пароль для каждой области, к которой он желает получить доступ. После того, как сервер получил запрос к ресурсу, указанному в URI, он может ответить клиенту вызовом, например:

В данном случае «WallyWorld» — это обычная строка, назначенная сервером, которая идентифицирует область защиты запрашиваемого URI. Получит доступ к данному URI и всей определенной области защиты клиент может так:

Грубо говоря, клиентское приложение отправляет серверу логин и пароль для данной области защиты, а итоговое поле заголовка после кодирования (читай про кодирование в HTTP) будет выглядеть примерно так:

Более подробно аутентификацию HTTP мы рассмотрим, когда будем работать с сервером Apache, сейчас только скажу, что аутентификация HTTP обычно используется на серверах для доступа к залогиненым папкам и очень небезопасна (про безопасность в HTTP написано здесь), поэтому разработчики используют часто дополнительные механизмы проверки подлинности. Кстати, вы обратили внимание, что, по сути, механизм аутентификации не предусматривает кнопки «выход»?

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

Один комментарий к записи Тема 11: Аутентификация в HTTP. Проверка подлинности пользователей в HTTP

Ольга

Зачем тогда вообще нужна аутентификация в HTTP, если она так ненадежно реализована? Если все передается в открытую и не шифруется и не кодируется.

Текст комментария: