Автоматическая авторизация на js

1. Trukit 10.04.23 13:16 Сейчас в теме
Я пишу сайт на языке js, в котором пользователь сможет видеть те же данные, что и в 1С
У меня есть готовая страница с авторизацией, на которой пользователь вводит Имя пользователя и Пароль. Потом он нажимает кнопку для входа, которая должна обращаться к HTTP-сервису POST на 1С, где будет проверяться правильность введенных данных. После чего он должен обратно передать ответ, если данные верны, то будет открываться новая страницы со всеми нужными данные, полями, а если данные не верны, то просто ошибка и всё

Но пока у меня проблемы с авторизацией, т.к. не получается обратиться к сервису на 1С. Пишет ошибку 401 Unauthorized

вот код на js, где происходит обращение к сервису:

async sendData(url, login, password) {
const data = JSON.stringify({
login: login,
password: password
});
const responce = await fetch(url, {
method: 'POST',
mode: 'no-cors',

headers: new Headers({
'Authorization': `Basic ${btoa(`${login}:${password}`)}`
}),
body: data,
credentials: 'same-origin'
}).then(responce => {
if (!responce.ok) throw new Error(responce.status);
return responce.json;
})

return responce;
}

Может кто-нибудь знает, что да как делать
Перепробовал все способы из интернета
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Sashares 34 10.04.23 15:03 Сейчас в теме
(1)Установи Fiddler.
Выполни авторизацию в 1С в браузере - посмотри в фидлере, какой запрос формируется.
Выполни авторизацию с помощью своего кода на js, посмотри в фидлере какой запрос формируется.
Найди отличия и исправь их.
6. user1880116 10.04.23 19:39 Сейчас в теме
(1)
Я пишу сайт на языке js
Не надо.
2. Trukit 10.04.23 14:22 Сейчас в теме
я только узнал, что метод no-cors не позволяет просматривать заголовок Authorization. Я его убрал, но все равно не работает, и выходят такие вот ошибки
Прикрепленные файлы:
9. ONLYTILT 20 11.04.23 04:38 Сейчас в теме
(3)

(2) У вас браузер блокирует соединение к другому домену, если вы используете базовую авторизацию предприятия, то вам нужно подставить в ответ запроса заголовки CORS с разрешенным доменом с которого вы делаете запрос, например "Access-Control-Allow-Origin": "http://localhost:3000", как это сделать на вашем веб сервере можно погуглить.
4. user595330_it 10.04.23 15:56 Сейчас в теме
Ошибка 401 Unauthorized указывает на проблемы с аутентификацией. Вам следует убедиться, что вы используете верные учетные данные и правильно формируете заголовок 'Authorization'.

Прежде всего, убедитесь, что вы используете правильный адрес URL для вашего HTTP-сервиса POST в 1С. Затем проверьте, что вы передаете корректные логин и пароль пользователя.

Также стоит убедиться, что сервер 1С настроен на использование базовой аутентификации (Basic Authentication) и что он позволяет кросс-доменные запросы (CORS) для вашего домена или использует настройки CORS, которые разрешают все источники.

Если вы все еще получаете ошибку 401, попробуйте изменить настройки запроса. Вот обновленная версия вашей функции sendData:

async sendData(url, login, password) {
const data = JSON.stringify({
login: login,
password: password
});
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Basic ${btoa(`${login}:${password}`)}`
},
body: data,
credentials: 'include'
}).then(response => {
if (!response.ok) throw new Error(response.status);
return response.json();
});

return response;
}

В этом примере я удалил mode: 'no-cors', так как это может вызвать проблемы с аутентификацией и добавил заголовок 'Content-Type': 'application/json' для указания формата передаваемых данных. Значение 'credentials' изменено на 'include' для передачи куки и заголовков авторизации вместе с запросом.

Если эти изменения не решат проблему, вам может потребоваться проверить настройки сервера 1С и убедиться, что он корректно настроен для работы с вашим веб-приложением и использует соответствующие методы аутентификации.
5. Trukit 10.04.23 16:03 Сейчас в теме
(4)
Также стоит убедиться, что сервер 1С настроен на использование базовой аутентификации (Basic Authentication) и что он позволяет кросс-доменные запросы (CORS) для вашего домена или использует настройки CORS, которые разрешают все источники.


не подскажите как узнать, что сервер настроен, и что он позволяет кросс-доменные запросы?
7. user595330_it 10.04.23 22:24 Сейчас в теме
(5)Для того чтобы убедиться, что сервер 1С настроен на использование базовой аутентификации (Basic Authentication) и разрешает кросс-доменные запросы (CORS), выполните следующие действия:

Проверьте настройки сервера 1С:

Откройте конфигурацию сервера 1С (обычно это файл 1cv8s.exe.config или web.config для сервера IIS) и ищите раздел, связанный с аутентификацией. Для базовой аутентификации строка должна выглядеть примерно так: <authentication mode="Basic" />.
Если вы не нашли эту строку, добавьте её в соответствующий раздел вашего файла конфигурации и перезапустите сервер 1С.
Проверьте и настройте CORS на сервере 1С:

В файле конфигурации сервера 1С (снова, это может быть файл 1cv8s.exe.config или web.config для сервера IIS) ищите раздел, связанный с CORS. Если вы используете IIS, строка должна выглядеть примерно так: <add name="Access-Control-Allow-Origin" value="*" />.
Если вы не нашли эту строку, добавьте её в соответствующий раздел вашего файла конфигурации и перезапустите сервер 1С.
Значение * разрешает доступ ко всем источникам. Вы можете заменить его на домен, с которого разрешены кросс-доменные запросы, например: <add name="Access-Control-Allow-Origin" value="http://example.com" />.
8. laperuz 46 11.04.23 04:16 Сейчас в теме
Извините за оффтоп, но прочитал тему, и сложилось впечатление, что chatGPT пообщался с другим chatGPT)
Trukit; ONLYTILT; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот