Как запретить React-Native-Windows запрашивать учетные данные HTTP Basic Auth

Я использую React Native с плагином для универсальной платформы Windows для доступа к удаленным ресурсам на сервере REST.

При выполнении запроса на выборку для ресурса, который требует авторизации через HTTP Basic Auth, я могу предоставить запрос с дополнительным заголовком "Авторизация", и все работает нормально, если учетные данные верны.

Если учетные данные неверны, я получаю приглашение для входа в Windows (аналогично тому, как при подключении к удаленному компьютеру). Это приложение не управляется моим приложением, но автоматически появляется, когда базовое сетевое соединение обнаруживает ответ 401 Unauthorized server.

Вот что я делаю внутри React Native:

let encodedCredentials = new Buffer(this.state.username + ":" + this.state.password).toString("base64");

let response = await fetch(this.state.serverUrl, {
    method: 'GET',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Authorization': "Basic " + encodedCredentials, 
    }
});

let responseJson = await response.text();

alert(responseJson);

Ответ сервера, если он предоставлен с неверными учетными данными, включает в себя:

Status Code: 401 Unauthorized
WWW-Authenticate: Basic realm="iOSResource"

Обратите внимание, что собственное приглашение к входу в систему задерживает запрос на выборку в целом. Я могу ввести неправильные учетные данные и подтвердить запрос несколько раз без предупреждения один раз. Только когда приглашение явно отменено, вводятся правильные учетные данные или неверные учетные данные были пробованы пару раз, пока ожидание выборки продолжается.

К сожалению, это вызывает еще одну проблему: при вводе неправильных учетных данных во всплывающем приглашении пару раз, и оно, наконец, "сдается", я могу предоставить любые учетные данные, которые я хочу, для запроса на выборку, он не предоставит свой собственный заголовок авторизации серверу в любых будущих запросах. Отправленные данные будут привязаны к тому, что я ввел в приглашение, прежде чем оно будет закрыто. В этом случае он не вызывает запрос снова, и запрос просто сразу завершается неудачей. Это оставляет меня не в состоянии исправить учетные данные в моем собственном приложении, потому что они просто не отправляются в запросе. Я подтвердил это, проверив исходящие данные в Wireshark.

Я предполагаю, что Windows, по-видимому, прозрачно вмешивается в сетевой запрос для перехвата специальных кодов ответа и при необходимости повторно запрашивает учетные данные, прежде чем в первый раз вернуть результат запроса фактическому вызывающему.

Я хочу иметь дело с неправильными учетными данными в приложении, вместо того, чтобы заставлять Windows перехватывать запросы. Есть ли способ подавить это собственное приглашение и сразу же продолжить работу с моим собственным кодом в случае сбоя базовой аутентификации?

Изменить: Поведение точно так же при использовании Axios вместо простого извлечения. Похоже, что в конечном итоге оба делают XMLHttpRequest, который фильтруется одинаково.

0 ответов

Другие вопросы по тегам