HTTP метки или HTTP тэги
Здравствуйте, уважаемые посетители сайта ZametkiNaPolyah.ru. Продолжим знакомиться с протоколом HTTP в рубрике серверы и протоколы…
Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике Серверы и протоколы и ее разделе HTTP протокол. Их этой записи ты узнаешь, как реализована аутентификация клиентов на сервере в HTTP протоколе и как происходит проверка подлинности клиента, так же мы с тобой рассмотрим как происходит базовая аутентификации клиента на сервере.
Аутентификация в HTTP. Проверка подлинности в HTTP
В протоколе HTTP реализован механизм аутентификации или проверки подлинности клиента. Аутентификация в HTTP довольно простая: для проверки подлинности используются, как всегда, HTTP запросы от клиента и HTTP ответы от сервера, но со специальными полями заголовка. Очень подробно про аутентификацию в HTTP написано в документе RFC 2617, мы же с вами поговорим про общие детали проверки подлинности клиента в HTTP.
Для проверки подлинности у HTTP сервера есть специальный механизм, который по-русски называется вызов-ответ, по-английски: challenge-response. Сервер может применить этот механизм чтобы вызвать (получить) от клиента HTTP сообщение, в котором будут содержаться данные для аутентификации клиента. Механизм вызов-ответ по сути – это набор полей HTTP заголовка и, как и любое другое поле, поля установления подлинности в HTTP имеют атрибуты и значения, одно поле может иметь несколько значений, которые разделяются запятой и не чувствительны к регистру символов.
[php]
auth-scheme = token
auth-param = token «=» quoted-string
[/php]
Помните мы рассматривали коды ошибок HTTP клиента и там был код 401, который означал не аутентифицирован? Так вот, данный код используется для «активации» механизма аутентификации в HTTP, этим кодом сервер просит клиента предоставить данные для проверки подлинности HTTP. При этом HTTP ответ сервера должен содержать поле заголовка WWW-Authenticate.
[php]
challenge = auth-scheme 1*SP realm *( «,» auth-param )
realm = «realm» «=» realm-value
realm-value = quoted-string
[/php]
Атрибут realm не чувствительный к регистру и необходим для установления подлинности в HTTP при всех вызовах. А вот значение данного атрибута к регистру чувствительно и вместе с URL сервера (читай про URI в HTTP), на который был направлен запрос клиента, определяет область или пространство защиты. Таким образом HTTP сервер может создавать пространства защиты, к каждому из которых, могут быть применены различные способы установления подлинности клиента.
Обычно для установления подлинности клиент использует поля заголовка Authorization, которое включает в запрос после того, как он получил код состояния 401. Значения поля Authorization состоят из так называемых рекомендаций (credentials), в этих самых рекомендациях содержится информация для аутентификации HTTP клиента.
[php]
credentials = basic-credentials
| auth-scheme #auth-param
[/php]
Домен, для которого применяются рекомендации для аутентификации со стороны клиента, определяется областью защиты, а если клиент подтвердил свою подлинность в предыдущем запросе, то рекомендации, которые он передал серверному приложению используются многократно в рамках домена.
Если HTTP серверу «не понравятся» рекомендации клиента, то он возвращает код состояния 401. Однако стоит заметить, что стандарт протокола HTTP никак не ограничивает HTTP приложения: то есть приложениям не обязательно для аутентификации использовать механизм запрос-ответ для подтверждения подлинности.
Базовая схема аутентификации в HTTP реализована по принципу: логин-пароль. Клиент высылает серверу логин и пароль для каждой области, к которой он желает получить доступ. После того, как сервер получил запрос к ресурсу, указанному в URI, он может ответить клиенту вызовом, например:
[php]
WWW-Authenticate: Basic realm="WallyWorld"
[/php]
В данном случае «WallyWorld» — это обычная строка, назначенная сервером, которая идентифицирует область защиты запрашиваемого URI. Получит доступ к данному URI и всей определенной области защиты клиент может так:
[php]
basic-credentials = «Basic» SP basic-cookie
basic-cookie = <base64-кодированный user-pass,
за исключением не ограниченных 76
символами в строке>
user-pass = userid «:» password
userid = *<TEXT не содержащий «:»>
password = *TEXT
[/php]
Грубо говоря, клиентское приложение отправляет серверу логин и пароль для данной области защиты, а итоговое поле заголовка после кодирования (читай про кодирование в HTTP) будет выглядеть примерно так:
[php]
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
[/php]
Более подробно аутентификацию HTTP мы рассмотрим, когда будем работать с сервером Apache, сейчас только скажу, что аутентификация HTTP обычно используется на серверах для доступа к залогиненым папкам и очень небезопасна (про безопасность в HTTP написано здесь), поэтому разработчики используют часто дополнительные механизмы проверки подлинности. Кстати, вы обратили внимание, что, по сути, механизм аутентификации не предусматривает кнопки «выход»?
Не забывайте делиться своим мнением в комментариях и оставлять отзывы, это поможет сделать нашу работу лучше, с уважением ZametkiNaPolyah.ru!
Pingback: Ольга