Spec-Zone.ru › HTTP

Заголовки: WWW-Authenticate

Заголовок WWW-Authenticate

Базовая поддержка Широко доступно *

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

* Поддержка некоторых частей этой функции может различаться.

  • Подробнее
  • Полная информация о совместимости
>

HTTP-заголовок WWW-Authenticate ответа объявляет методы аутентификации HTTP (или вызовы), которые могут использоваться для получения доступа к определённому ресурсу.

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

Сервер, использующий аутентификацию HTTP, ответит кодом 401 Unauthorized на запрос защищённого ресурса. Этот ответ должен содержать как минимум один заголовок WWW-Authenticate и хотя бы один вызов, указывающий, какие схемы аутентификации можно использовать для доступа к ресурсу и какие дополнительные данные требуются каждой конкретной схеме.

В одном заголовке WWW-Authenticate может быть указано несколько вызовов, а в одном ответе — несколько заголовков WWW-Authenticate. Сервер также может включать заголовок WWW-Authenticate в другие сообщения ответа, чтобы указать, что предоставление учётных данных может повлиять на ответ.

Получив заголовок WWW-Authenticate, клиент обычно запрашивает у пользователя учётные данные, а затем повторно запрашивает ресурс. В этом новом запросе используется заголовок Authorization, чтобы передать серверу учётные данные, закодированные в соответствии с выбранным методом аутентификации. Предполагается, что клиент выберет наиболее безопасный из понятных ему вызовов (обратите внимание: в некоторых случаях понятие «наиболее безопасный» спорно).

Тип заголовка Заголовок ответа

Синтаксис

WWW-Authenticate: <challenge>

Здесь <challenge> состоит из <auth-scheme>, за которым следует необязательный <token68> или список <auth-params>, разделённых запятыми:

challenge = <auth-scheme> <auth-param>, …, <auth-paramN>
challenge = <auth-scheme> <token68>

Например:

WWW-Authenticate: <auth-scheme>
WWW-Authenticate: <auth-scheme> token68
WWW-Authenticate: <auth-scheme> auth-param1=param-token1
WWW-Authenticate: <auth-scheme> auth-param1=param-token1, …, auth-paramN=param-tokenN

Наличие token68 или параметров аутентификации зависит от выбранной <auth-scheme>. Например, для базовой аутентификации требуется <realm>, допускается необязательный ключ charset, но не поддерживается token68:

WWW-Authenticate: Basic realm="Dev", charset="UTF-8"

Несколько вызовов можно передать списком, разделённым запятыми

WWW-Authenticate: <challenge>, …, <challengeN>

В одном ответе также можно передать несколько заголовков:

WWW-Authenticate: <challenge>
WWW-Authenticate: <challengeN>

Директивы

<auth-scheme>

Токен без учёта регистра, указывающий используемую схему аутентификации. К наиболее распространённым типам относятся Basic, Digest, Negotiate и AWS4-HMAC-SHA256. IANA ведёт список схем аутентификации, однако хостинговые службы предлагают и другие схемы.

<auth-param> Необязательный

Параметр аутентификации, формат которого зависит от <auth-scheme>. <realm> описан ниже, поскольку это распространённый параметр аутентификации во многих схемах.

<realm> Необязательный

Строка realm, за которой следуют = и строка в кавычках с описанием защищённой области, например realm="staging environment". Область позволяет серверу разделять защищаемые им области (если схема поддерживает такое разделение). Некоторые клиенты показывают это значение пользователю, чтобы сообщить, какие именно учётные данные требуются, однако большинство браузеров перестали так делать для защиты от фишинга. Единственный набор символов, поддержка которого для этого значения гарантирована, — us-ascii. Если область не указана, клиенты часто отображают отформатированное имя хоста.

<token68> Необязательный

Токен, который может быть полезен для некоторых схем. Токен допускает 66 незарезервированных символов URI и ещё несколько символов. Он может содержать данные в кодировке Base64, Base64url, Base32 или Base16 (шестнадцатеричной), с дополнением или без него, но без пробельных символов. Вариант token68 вместо списков auth-param поддерживается для совместимости с устаревшими схемами аутентификации.

Как правило, для определения параметров аутентификации, необходимых каждой <auth-scheme>, следует обратиться к соответствующим спецификациям. В следующих разделах описаны токены и параметры аутентификации для некоторых распространённых схем.

Директивы базовой аутентификации

<realm>

<realm>, описанная выше. Обратите внимание, что для аутентификации Basic область обязательна.

charset="UTF-8" Необязательный

Сообщает клиенту предпочтительную кодировку сервера для передачи имени пользователя и пароля. Допускается только строка UTF-8 без учёта регистра. Это не относится к кодировке строки области.

Директивы дайджест-аутентификации

<realm> Необязательный

<realm>, описанная выше, указывающая, какие имя пользователя и пароль следует использовать. Как минимум она должна содержать имя хоста, но также может указывать пользователей или группу, которым предоставлен доступ.

domain Необязательный

Список префиксов URI в кавычках, разделённых пробелами, которые определяют все местоположения, где можно использовать данные аутентификации. Если этот ключ не указан, данные аутентификации можно использовать в любом месте корня веб-сайта.

nonce

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

opaque

Строка в кавычках, заданная сервером и возвращаемая без изменений в заголовке Authorization. Она непрозрачна для клиента. Рекомендуется включать в неё данные Base64 или шестнадцатеричные данные.

stale Необязательный

Флаг без учёта регистра, указывающий, что предыдущий запрос клиента был отклонён, поскольку использованный nonce устарел. Если значение равно true, запрос можно повторить, используя то же имя пользователя и пароль, зашифрованные с помощью нового nonce. При любом другом значении имя пользователя и пароль недействительны, и их необходимо повторно запросить у пользователя.

algorithm Необязательный

Строка, указывающая алгоритм создания дайджеста. Допустимые значения без режима сессии: MD5 (по умолчанию, если algorithm не указано), SHA-256, SHA-512. Допустимые значения для режима сессии: MD5-sess, SHA-256-sess, SHA-512-sess.

qop

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

  • "auth": аутентификация
  • "auth-int": аутентификация с защитой целостности
charset="UTF-8" Необязательный

Сообщает клиенту предпочтительную кодировку сервера для передачи имени пользователя и пароля. Допускается только строка без учёта регистра "UTF-8".

userhash Необязательный

Сервер может указать "true", чтобы сообщить о поддержке хеширования имени пользователя (по умолчанию — "false").

Аутентификация HTTP, привязанная к источнику (HOBA)

<challenge>

Набор пар в формате <len>:<value>, объединённых в одну строку и передаваемых клиенту. Вызов состоит из nonce, алгоритма, источника, области, идентификатора ключа и самого вызова.

<max-age>

Количество секунд с момента отправки ответа HTTP, в течение которых можно принимать ответы на этот вызов.

<realm> Необязательный

Как описано выше в разделе директив.

Примеры

>

Передача нескольких вызовов аутентификации

В одном заголовке ответа можно указать несколько вызовов:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: challenge1, …, challengeN

В одном ответе можно передать несколько вызовов в отдельных заголовках WWW-Authenticate:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: challenge1
WWW-Authenticate: challengeN

Базовая аутентификация

Заголовок ответа WWW-Authenticate сервера, поддерживающего только базовую аутентификацию, может выглядеть так:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Staging server", charset="UTF-8"

Получив этот заголовок, пользовательский агент сначала запросит у пользователя имя пользователя и пароль, а затем повторно запросит ресурс, передав закодированные учётные данные в заголовке Authorization. Заголовок Authorization может выглядеть так:

Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

Для аутентификации Basic учётные данные формируются следующим образом: сначала имя пользователя и пароль объединяются двоеточием (aladdin:opensesame), а затем полученная строка кодируется в base64 (YWxhZGRpbjpvcGVuc2VzYW1l).

Примечание: См. также раздел «Аутентификация HTTP» с примерами настройки серверов Apache и Nginx для защиты сайта паролем с помощью базовой аутентификации HTTP.

Дайджест-аутентификация с SHA-256 и MD5

Примечание: Этот пример взят из RFC 7616 «Аутентификация HTTP с дайджест-доступом» (в других примерах спецификации показано использование SHA-512, charset и userhash).

Клиент пытается получить доступ к документу по URI http://www.example.org/dir/index.html, защищённому дайджест-аутентификацией. Имя пользователя для этого документа — «Mufasa», а пароль — «Circle of Life» (обратите внимание на один пробел между словами).

При первом запросе документа поле заголовка Authorization не отправляется. Сервер отвечает сообщением HTTP 401, содержащим вызов для каждого поддерживаемого им алгоритма дайджеста в порядке предпочтения (SHA256, затем MD5).

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
    realm="http-auth@example.org",
    qop="auth, auth-int",
    algorithm=SHA-256,
    nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
    opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"
WWW-Authenticate: Digest
    realm="http-auth@example.org",
    qop="auth, auth-int",
    algorithm=MD5,
    nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
    opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"

Клиент запрашивает у пользователя имя пользователя и пароль, а затем отправляет новый запрос с учётными данными, закодированными в поле заголовка Authorization. Если клиент выбрал дайджест MD5, поле заголовка Authorization может выглядеть так:

Authorization: Digest username="Mufasa",
    realm="http-auth@example.org",
    uri="/dir/index.html",
    algorithm=MD5,
    nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
    nc=00000001,
    cnonce="f2/wE4q74E6zIJEtWaHKaf5wv/H5QzzpXusqGemxURZJ",
    qop=auth,
    response="8ca523f5e9506fed4657c9700eebdbec",
    opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"

Если клиент выбрал дайджест SHA-256, поле заголовка Authorization может выглядеть так:

Authorization: Digest username="Mufasa",
    realm="http-auth@example.org",
    uri="/dir/index.html",
    algorithm=SHA-256,
    nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
    nc=00000001,
    cnonce="f2/wE4q74E6zIJEtWaHKaf5wv/H5QzzpXusqGemxURZJ",
    qop=auth,
    response="753927fa0e85d155564e2e272a28d1802ca10daf449
        6794697cf8db5856cb6c1",
    opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"

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

Заголовок ответа WWW-Authenticate сервера, поддерживающего аутентификацию HOBA, может выглядеть так:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: HOBA max-age="180", challenge="16:MTEyMzEyMzEyMw==1:028:https://www.example.com:8080:3:MTI48:NjgxNDdjOTctNDYxYi00MzEwLWJlOWItNGM3MDcyMzdhYjUz"

Подписываемый блок вызова состоит из следующих частей: www.example.com с использованием порта 8080, nonce 1123123123, алгоритм подписи RSA-SHA256, идентификатор ключа 123 и, наконец, вызов 68147c97-461b-4310-be9b-4c707237ab53.

Получив этот заголовок, клиент извлечёт вызов, подпишет его своим закрытым ключом, соответствующим идентификатору ключа 123 в нашем примере, используя RSA-SHA256, а затем отправит результат в заголовке Authorization как идентификатор ключа, вызов, nonce и подпись, разделённые точками.

Authorization: 123.16:MTEyMzEyMzEyMw==1:028:https://www.example.com:8080:3:MTI48:NjgxNDdjOTctNDYxYi00MzEwLWJlOWItNGM3MDcyMzdhYjUz.1123123123.<signature-of-challenge>

Спецификации

Спецификация
Семантика HTTP>
# field.www-authenticate>

Совместимость с браузерами

Настольные компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS
Basic 1 12 1 15 1 18 4 14 1 1.0 37 1
Digest 1 12 1 15 1 18 4 14 1 1.0 4.4 1
NTLM 1 79 1 15 ≤7 18 4 14 ≤7 1.0 4.4 ≤7
Negotiate 1 79 1 15 ≤7 18 4 14 ≤7 1.0 4.4 ≤7
WWW-Authenticate 1 12 1 15 1 18 4 14 1 1.0 4.4 1

См. также

  • Аутентификация HTTP
  • Authorization
  • Proxy-Authorization
  • Proxy-Authenticate
  • 401, 403, 407

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/WWW-Authenticate

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API