Базовые учетные данные аутентификации игнорируются в Chrome после первой попытки аутентификацииPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Базовые учетные данные аутентификации игнорируются в Chrome после первой попытки аутентификации

Сообщение Anonymous »

В течение нескольких часов я отлаживал проблему с одним из моих веб-приложений, которая на самом деле, похоже, зависит от браузера.
Проблема заключалась в том, что если пользователь изначально вошел в систему с «неправильными» учетными данными, ему может потребоваться повторная аутентификация позже. Это может произойти не сразу, поскольку полученные учетные данные передаются на другой сервер, т. е. сервер не будет сразу 401, если учетные данные неверны.
Я могу легко это проверить, предоставив поддельные учетные данные при первой аутентификации и получив всплывающее окно базовой аутентификации. Приложение, заметив, что первый запрос не выполнен, снова запросит учетные данные при следующем запросе. На этом этапе я получаю еще одно базовое приглашение для аутентификации. На этом этапе независимо от того, что я ввожу, учетные данные, отправляемые на сервер, представляют собой исходное имя пользователя и пароль, предоставленные изначально, но только в Chrome (и любых браузерах на основе Chromium1).
Напротив, когда я пробую это в Pale Moon, все работает так, как ожидалось. Каждый раз, когда я получаю запрос базовой аутентификации и повторно ввожу учетные данные, новые учетные данные отправляются браузером на веб-сервер.
Я попробовал добавить случайную строку в область базовой аутентификации, которая теоретически должна сообщать браузеру, что это другая область каждый раз, когда он запрашивает базовую аутентификацию. Однако это не имело никакого значения.
Удивительно, что даже при немедленном ответе с кодом 401 на каждый запрос и неоднократном повторном запросе учетных данных первые учетные данные по-прежнему кажутся «прилипшими» и отправляются снова и снова, независимо от того, что пользователь вводит после этого:

Код: Выделить всё

if (!isset($_SERVER['PHP_AUTH_PW']) || $_SESSION['bauth']['reprompt'] == 2) {
$_SESSION['bauth']['reprompt'] = 0; /* Reset */
$_SESSION['bauth']['realm'] = "myrealm " . time();
header("WWW-Authenticate: Basic realm=\"" . $_SESSION['bauth']['realm'] . "\"");
header("HTTP/1.1 401 Unauthorized");
echo "Re-enter credentials";
} else {
error_log("User: " . $_SERVER['PHP_AUTH_USER'], 0);
if ($_SERVER['PHP_AUTH_USER'] !== "done") {
$_SESSION['bauth']['reprompt'] = 0; /* Reset */
$_SESSION['bauth']['realm'] = "myrealm " . time();
header("WWW-Authenticate: Basic realm=\"" . $_SESSION['bauth']['realm'] . "\"");
header("HTTP/1.1 401 Unauthorized");
echo "Re-enter credentials";
}
}
Изначально я использовал PHP_AUTH_USER и PHP_AUTH_PW, но в рамках отладки я декодировал необработанный HTTP-заголовок Authorization и подтвердил, что отправляли браузеры.
Единственное «исправление» — полностью закрыть браузер и снова открыть, после чего проблема просто повторится. Chrome примет первые предоставленные учетные данные и будет работать с ними вечно, игнорируя любые учетные данные, предоставленные при будущих попытках базовой аутентификации во время этого сеанса - даже если область изменится.
Как ни странно, я не встречал ни у кого именно такой проблемы, поэтому я не уверен, что это ошибка браузера, хотя есть аналогичные вопросы о том, что работает в браузерах на основе Firefox, но не в браузерах на основе Chrome. В любом случае, поскольку браузер находится вне моего контроля, могу ли я попытаться обойти это со стороны приложения, чтобы смягчить проблему для Chrome?
1 Несколько браузеров (Chrome, Supermium), несколько версий на нескольких компьютерах.
Обновленные результаты
Я потратил некоторое время, пытаясь найти «разделительную линию» между тем, что работает, и тем, что не работает должным образом.
Похоже, что Chrome каким-то странным образом требователен к значению области базовой аутентификации.
Это работает в Chrome (при каждом повторном запросе отправляются текущие учетные данные)

Код: Выделить всё


Подробнее здесь: [url]https://stackoverflow.com/questions/79891236/basic-auth-credentials-ignored-in-chrome-after-the-first-auth-attempt[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»