Процедуры аутентификации «прокси-сервер - пользователь» |
|
Подобным образом, когда прокси-сервер получает запрос от UAC, он может потребовать проведения процедуры удостоверения подлинности, прежде чем приступить к обработке. Если значение отклика аутентификации отсутствует в заголовке Proxy-Authorization запроса, прокси-сервер может запросить у инициатора запроса подтверждение подлинности, отклонив запрос и передав ответ с кодом 407 (Proxy Authentication Required). В ответное сообщение прокси-сервер должен поместить заголовок Proxy-Authenticate с запросом аутентификации, содержащим схему (схемы) аутентификации и параметры, применимые для данной области аутентификации. Обязанность UAC состоит в том, чтобы добавить заголовок Proxy-Authorization со значением, содержащим отклик аутентификации для области прокси-сервера, который желает удостоверить подлинность. Когда инициирующий запрос UAC получает ответ с кодом 407 (Proxy Authentication Required), он, если это возможно, должен снова передать запрос, снабдив его надлежащим значением отклика аутентификации. Он должен выполнять те же процедуры отображения пользователю поля realm так же, как указано в п. 6.2 при получении ответа с кодом 401. Если значение отклика аутентификации для данной области не найдено, UAC может предпринять еще одну попытку - передать запрос с именем пользователя «anonymous» и без пароля. UAC должен заносить в кэш-память значение отклика аутентификации, используемое в переданном запросе. Значение отклика будет включено во все запросы с идентичным значением заголовка Call-ID. Значение заголовка Proxy-Authorization используется только тем прокси-сервером, чья область идентифицирована в поле realm. Когда используется последовательность нескольких прокси-серверов, значение заголовка Proxy-Authorization не удаляется прокси-сервером, чья область не соответствует полю realm. При получении размноженного запроса прокси-серверы могут запросить у UAC подтверждение подлинности. В этом случае прокси-сервер, размножающий запросы, должен сгруппировать все запросы аутентификации в одном ответе. Каждое значение заголовков WWW-Authenticate и Proxy-Authenticate,полученное в ответах на размноженный запрос, должно быть помещено в единый ответ, передаваемый размножающим запросы прокси-сервером агенту пользователя. Очередность следования этих заголовков не имеет значения. Прокси-сервер передает запрос только в случае, когда на его ответ с кодом 407 UAC передаст запрос, содержащий действительное значение отклика аутентификации. Прокси-сервер, размножающий запросы, может пересылать запрос одновременно нескольким прокси-серверам, требующим проведения процедуры аутентификации, которые, в свою очередь, не примут запрос, пока UAC не аутен-тифицирует себя в соответствующих им областях. Если UAC не передаст отклик аутентификации для каждого запроса аутентификации, запрос не дойдет до агента пользователя, где, возможно, находится адресат и, следовательно, эффективность размножения запросов в значительной степени понижается. При передаче запроса, который должен содержать отклики аутентификации, UAC добавляет значение заголовка Authorization для каждого значения заголовка WWW-Authenticate и значение заголовка Proxy-Authorization для каждого значения заголовка Proxy-Authenticate. Оклики аутентификации в запросе должны быть различимы по значению поля realm. He исключается возможность получения нескольких запросов аутентификации, связанных с одной областью, водном ответе с кодом 401 (Unauthorized) или 407 (Proxy Authentication Required). Например, это может произойти, когда несколько прокси-серверов в пределах одного административного домена, использующих общее значение realm, получают размноженный запрос. Следовательно, при очередной попытке передать запрос UAC может поместить несколько откликов аутентификации в заголовок Authorization или Proxy-Authorization с одним и тем же значением поля realm. Для одной области должен быть использован один и тот же отклик аутентификации. realm domain nonceСтрока данных, сформированная сервером, которая уникально генерируется каждый раз при создании ответа с кодом 401. Строка может быть в шестнад-цатеричном представлении или закодирована с помощью base64. Содержимое nonce зависит от реализации. Как правило, значение nonce обрабатывается при помощи алгоритма хэширования. Значение поля nonce копируется в заголовок Authorization последующего запроса; после получения запроса сервер пересчитывает значение nonce и сравнивает его с полученным в запросе. При несоответствии запрос отклоняется. Если в содержимое nonce входит метка времени (time-stamp), сервер имеет возможность ограничить время действия значения nonce. Значения nonce не прозрачно для клиента. opaque Сформированная сервером строка данных, которая должна передаваться клиентом неизменной в заголовке Authorization следующих запросов, адресованных на URI, которые находятся в той же области защиты. Рекомендуется, чтобы строка была в шестнадцатеричном представлении или закодирована с помощью base64. username staleФлаг, указывающий, что предыдущий запрос клиента был отклонен, поскольку значение nonce было просрочено. Если флаг установлен в состояние «TRUE», клиент может повторить попытку передать сообщение без запроса у пользователя нового имени и пароля. Сервер присваивает флагу stale значение «TRUE» только в случае, когда он получает запрос, содержащий неверное значение nonce, но верное значение отклика (указывающее, что клиенту известны верные имя пользователя и пароль). Если значение флага - «FALSE», или любое другое, отличное от «TRUE», или поле stale отсутствует, это означает, что имя пользователя и/или пароль неверны, и поэтому должны быть введены новые значения. algorithmПоле, указывающее доступный алгоритм хэширования. В случае отсутствия поля по умолчанию подразумевается значение «MD5». Если алгоритм не понят, запрос аутентификации должен быть игнорирован (и использован следующий запрос аутентификации, если в ответе присутствует несколько запросов отклика аутентификации). Это поле является опциональным по причине обратной совместимости с более старой рекомендацией [17]. Qop - строка, заключённая в кавычки, которая указывает уровни «quality of protection» (качества защиты), поддерживаемые сервером. Значения «auth» предусматривает применение только процедуры аутентификации, значение «auth-int» - процедур аутентификации и защиты целостности сообщения. В заголовке Authorization содержится отклик аутентификации, который включает в себя наименование схемы аутентификации (Digest) и компоненты: username, realm, nonce, uri, response, algorithm, cnonce, opaque, qop, nc. При этом необходимыми являются username, realm, nonce, uri, response. Значения полей opaque и algorithm должны быть скопированы из заголовка WWW-Authenticate соответствующего ответа. Назначение realm, nonce, algorithm, opaque описано выше. uriСодержит URI из поля Request-URI, входящего в состав Request-Line. URI дублирован здесь, поскольку при транспортировке запроса значение Request-URI может быть изменено прокси-серверами. В контексте протокола SIP эти два URI могут предназначаться разным пользователям, в зависимости от действий определенного прокси-сервера при продвижении запроса. response Указывает; какой уровень защиты клиент применил для своего сообщения. В случае присутствия, значение поля должно соответствовать одному из поддерживаемых вариантов, предложенных сервером в заголовке WWW- Authenticate. Это значение влияет на подсчет отклика аутентификации. cnonce nc В схеме аутентификации Digest применяется заголовок Authentication-Info. Заголовок Authentication-Info используется сервером в ответе для того, чтобы сообщить некоторую информацию, относящегося к процедуре аутентификации. Информация аутентификации представлена в нескольких полях: nextnonce, pop, rspauth, cnonce, nc. Обязательным является только поле nextnonce. nextnonceЗначение nextnonce - это строка nonce, которую сервер предписывает клиенту использовать в своем следующем отклике аутентификации. По сути, поле nextnonce является средством, реализующим выбор между использованием старого значения nonce или нового, измененного значения. Если клиент пренебрегает требованием сервера и не использует значение из поля nextnonce при создании содержимого поля заголовка Authorization, от сервера может придти запрос повторной аутентификации с флагом «stale=TRUE» . qop rspauth |

