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

Аутентификация в 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

Базовая схема аутентификации в 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!

Возможно, эти записи вам покажутся интересными


Выберете удобный для себя способ, чтобы оставить комментарий

This article has 1 comment

  1. Pingback: Ольга

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Loading Disqus Comments ...