WWW-Authenticate
WWW-Authenticate
Заголовок ответа HTTP WWW-Authenticate определяет методы аутентификации HTTP ("вызовы"), которые могут использоваться для доступа к определённому ресурсу.
Примечание: Этот заголовок является частью общего механизма аутентификации HTTP, который может использоваться с несколькими схемами аутентификации. Каждый "вызов" перечисляет поддерживаемую сервером схему и дополнительные параметры, определённые для этого типа схемы.
Сервер, использующий аутентификацию HTTP, ответит с кодом ответа 401 Unauthorized на запрос к защищённому ресурсу. Этот ответ должен содержать как минимум один заголовок WWW-Authenticate и как минимум один вызов, чтобы указать, какие схемы аутентификации могут быть использованы для доступа к ресурсу (и любые дополнительные данные, необходимые для каждой конкретной схемы).
Несколько вызовов допускаются в одном заголовке WWW-Authenticate, и несколько заголовков WWW-Authenticate допускаются в одном ответе. Сервер также может включить заголовок WWW-Authenticate в других сообщениях ответа, чтобы указать, что предоставление учётных данных может повлиять на ответ.
После получения заголовка WWW-Authenticate, клиент обычно запросит учётные данные у пользователя, а затем повторно запросит ресурс. Этот новый запрос использует заголовок Authorization для предоставления учётных данных серверу, закодированных соответствующим образом для выбранного метода аутентификации "вызова". Клиент должен выбрать наиболее безопасный из понятных ему вызовов (обратите внимание, что в некоторых случаях "наиболее безопасный" метод является дискуссионным).
| Тип заголовка | Заголовок ответа |
|---|---|
| Запрещённое имя заголовка | нет |
Синтаксис
Должен быть указан хотя бы один вызов. Несколько вызовов могут быть указаны, разделённые запятыми, в одном заголовке или в отдельных заголовках:
// Challenges specified in single header WWW-Authenticate: challenge1, ..., challengeN // Challenges specified in multiple headers WWW-Authenticate: challenge1 ... WWW-Authenticate: challengeN
Один вызов имеет следующий формат. Обратите внимание, что токен схемы (<auth-scheme>) является обязательным. Наличие realm, token68 и любых других параметров зависит от определения выбранной схемы.
// Possible challenge formats (scheme dependent) WWW-Authenticate: <auth-scheme> WWW-Authenticate: <auth-scheme> realm=<realm> WWW-Authenticate: <auth-scheme> token68 WWW-Authenticate: <auth-scheme> auth-param1=token1, ..., auth-paramN=auth-paramN-token WWW-Authenticate: <auth-scheme> realm=<realm> token68 WWW-Authenticate: <auth-scheme> realm=<realm> token68 auth-param1=auth-param1-token , ..., auth-paramN=auth-paramN-token WWW-Authenticate: <auth-scheme> realm=<realm> auth-param1=auth-param1-token, ..., auth-paramN=auth-paramN-token WWW-Authenticate: <auth-scheme> token68 auth-param1=auth-param1-token, ..., auth-paramN=auth-paramN-token
Например, аутентификация Basic допускает необязательные ключи realm и charset, но не поддерживает token68.
WWW-Authenticate: Basic WWW-Authenticate: Basic realm=<realm> WWW-Authenticate: Basic realm=<realm>, charset="UTF-8"
Директивы
<auth-scheme>-
Схема аутентификации. Некоторые из наиболее распространённых типов (регистр не учитывается):
Basic,Digest,NegotiateиAWS4-HMAC-SHA256.Примечание: Для получения дополнительной информации/вариантов см. HTTP Аутентификация > Схемы аутентификации
- realm=<realm> Необязательно
-
Строка, описывающая защищённую область. Область позволяет серверу разделить защищённые области (если это поддерживается схемой, допускающей такое разделение), и информирует пользователей о том, какие конкретные имя пользователя/пароль требуются. Если область не указана, клиенты часто отображают отформатированный хост-имя вместо неё.
-
<token68>Необязательно -
Токен, который может быть полезен для некоторых схем. Токен допускает 66 нерезервированных символов URI плюс несколько других. Согласно спецификации, он может содержать кодировку base64, base64url, base32 или base16 (шестнадцатеричную) с или без заполнения, но без пробелов.
Помимо <auth-scheme> и ключа realm, параметры авторизации специфичны для каждой схемы аутентификации. Как правило, вам нужно будет проверить соответствующие спецификации для этих (ключи для небольшой подгруппы схем перечислены ниже).
Basic
-
<realm>Необязательно -
Как выше.
-
charset="UTF-8"Необязательно -
Указывает клиенту предпочтительный кодировочный способ сервера при отправке имени пользователя и пароля. Единственное разрешённое значение — строка «UTF-8» (регистр не учитывается). Это не относится к кодировке строки области.
Digest
-
<realm>Необязательно -
Строка, указывающая, какие имя пользователя/пароль использовать. В минимальном формате должна включать имя хоста, но может указывать пользователей или группы, имеющие доступ.
-
domainНеобязательно -
Цитированный, разделённый пробелами список префиксов URI, определяющих все расположения, где могут быть использованы данные аутентификации. Если этот ключ не указан, то данные аутентификации могут использоваться в любой точке корневого веб-узла.
nonce-
Указанная сервером цитированная строка, которую сервер может использовать для управления сроком действия, в течение которого определённые учётные данные будут считаться действительными. Она должна генерироваться уникальным образом при каждом создании ответа 401, и может генерироваться чаще (например, позволяя использовать digest только один раз). Спецификация содержит рекомендации по возможным алгоритмам генерации этого значения. Значение nonce невидимо для клиента.
opaque-
Указанная сервером цитированная строка, которая должна быть возвращена без изменений в
Authorization. Она невидима для клиента. Серверу рекомендуется включать данные Base64 или шестнадцатеричные данные. -
staleНеобязательно -
Флаг, указывающий, что предыдущий запрос от клиента был отклонен, потому что используемый
nonceслишком старый (просроченный). Если этоtrue, запрос можно повторить, используя то же имя пользователя/пароль, зашифрованные с помощью новогоnonce. Если это любое другое значение, то имя пользователя/пароль недействительны и должны быть запрошены у пользователя заново. -
algorithmНеобязательно -
Алгоритм, используемый для создания digest. Действительные значения, не связанные с сеансом:
"MD5"(по умолчанию, если не указано),"SHA-256","SHA-512". Действительные значения, связанные с сеансом:"MD5-sess","SHA-256-sess","SHA-512-sess". qop-
Цитированная строка, указывающая качество защиты, поддерживаемой сервером. Это необходимо, и нераспознанные параметры должны быть проигнорированы.
-
"auth": Аутентификация -
"auth-int": Аутентификация с защитой целостности
-
-
charset="UTF-8"Необязательно -
Указывает клиенту предпочтительный кодировочный способ сервера при отправке имени пользователя и пароля. Единственное разрешённое значение — строка «UTF-8» (регистр не учитывается).
-
userhashНеобязательно -
Сервер может указать
"true"для указания поддержки хэширования имени пользователя (по умолчанию"false").
Примеры
Базовая аутентификация
Сервер, который поддерживает только базовую аутентификацию, может иметь заголовок ответа WWW-Authenticate следующего вида:
WWW-Authenticate: Basic realm="Access to the staging site", charset="UTF-8"
Получатель этого заголовка сначала запросит у пользователя имя пользователя и пароль, а затем повторно запросит ресурс: на этот раз, включив (закодированные) учётные данные в заголовке Authorization. Заголовок Authorization может выглядеть так:
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Для аутентификации "Basic" учётные данные формируются путём соединения имени пользователя и пароля двоеточием (aladdin:opensesame), а затем путём кодирования получившейся строки в base64 (YWxhZGRpbjpvcGVuc2VzYW1l).
Примечание: См. также HTTP аутентификацию для примеров того, как настроить серверы Apache или Nginx для защиты вашего сайта с помощью HTTP базовой аутентификации.
Аутентификация по принципу Digest с использованием SHA-256 и MD5
Примечание: Данный пример взят из RFC 7616 «Аутентификация доступа по принципу HTTP Digest» (в других примерах в спецификации используется SHA-512, charset, и userhash).
Клиент пытается получить доступ к документу по URI "http://www.example.org/dir/index.html", который защищен аутентификацией по принципу Digest. Имя пользователя для этого документа — «Mufasa», а пароль — «Круг Жизни» (обратите внимание на одиночный пробел между словами).
В первый раз, когда клиент запрашивает документ, заголовок 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"
Спецификации
| Спецификация |
|---|
| Семантика HTTP # field.www-authenticate |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | |
Basic |
1 |
12 |
1 |
1 |
Да |
Да |
37 |
Да |
Да |
Да |
Да |
Да |
Digest |
Да |
Да |
Да |
Нет |
Да |
Нет |
Да |
Да |
Да |
Да |
Нет |
Да |
NTLM |
Да |
Да |
Да |
Нет |
Да |
Нет |
Да |
Да |
Да |
Да |
Нет |
Да |
Negotiate |
Да |
Да |
Да |
Нет |
Да |
Нет |
Да |
Да |
Да |
Да |
Нет |
Да |
WWW-Authenticate |
1 |
12 |
1 |
1 |
Да |
Да |
37 |
Да |
Да |
Да |
Да |
Да |
См. также
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate