Ошибка "Bearer " в заголовке Authorization для веб-сервисов 1С. Ошибка формата потока (500)

14.03.25

Администрирование - Администрирование веб-серверов

Столкнулись с ошибкой авторизации веб-сервиса 1С из-за ненавистного "Bearer " в заголовке? Не беда! В новой статье разберем, как элегантно решить эту проблему, используя прокси-сервер. Забудьте о правках кода 1С, просто настройте прокси на Nginx или Apache и ваши веб-сервисы задышат полной грудью, принимая запросы по стандарту!

Приветствую.

Сегодня мы разберем досадную, но, к сожалению, встречающуюся проблему при работе с веб-сервисами на платформе 1С: ошибку формата потока 500 при обработке заголовка Authorization, когда в нем передается схема аутентификации "Bearer " (с пробелом) перед токеном. Ошибка выходила на 24,25,26 релизе платформы 8.3.

 


 

Суть проблемы:

В современных веб-приложениях, особенно при использовании OAuth 2.0 и JWT (JSON Web Tokens), стандартным способом передачи токена авторизации в заголовке Authorization является использование схемы "Bearer "<токен>. То есть, заголовок выглядит так:

Authorization: Bearer TOKEN123

Однако, как выясняется на практике, веб-сервис на базе 1С (в зависимости от версии платформы) может некорректно обрабатывать схему "Bearer " и ожидать в заголовке Authorization только чистый токен, без префикса "Bearer " и пробела:

Authorization: TOKEN123

При получении запроса с "Bearer " 1С может выдавать ошибку 500, ошибка формата потока. И вы даже не сможете отладить свой сервис. Так как ошибка идет на уровне платформы. При этом, если отправить запрос с "чистым" токеном (без "Bearer "), все работает корректно.

В чем причина?

Скорее всего, проблема кроется в недостаточной или некорректной реализации обработки заголовка Authorization на стороне платформы 1С. Возможно, код 1С просто ожидает получить токен напрямую и не учитывает стандартную схему "Bearer ", не выполняя парсинг заголовка для извлечения токена из схемы.

Как обойти проблему? Решение через прокси!

Самым эффективным и универсальным способом решения этой проблемы является использование стороннего веб-сервера в качестве прокси-сервера перед вашим 1С веб-сервисом. Прокси-сервер будет выступать в роли "адаптера", принимая входящие запросы с "правильным" заголовком Authorization: Bearer TOKEN123, удалять проблемный префикс "Bearer " и пробел, и перенаправлять уже "очищенный" запрос с заголовком Authorization: TOKEN123 на 1С веб-сервис.

Преимущества прокси-решения:

  • Быстрое и простое внедрение: Настройка прокси-сервера занимает относительно немного времени и не требует внесения изменений в код 1С веб-сервиса.

  • Универсальность: Решение подходит для любых 1С веб-сервисов, испытывающих данную проблему.

  • Гибкость: Прокси-сервер можно настроить на различных платформах и веб-серверах (Nginx, Apache и т.д.).

  • Сохранение стандарта: Клиентские приложения продолжают отправлять запросы, используя стандартную схему "Bearer ", что является правильным с точки зрения безопасности и совместимости.

Как настроить прокси для удаления "Bearer "?

Рассмотрим примеры настройки на двух популярных веб-серверах: Nginx и Apache.

1. Настройка прокси на Nginx:

Nginx - это легкий и мощный веб-сервер, отлично подходящий для проксирования. Вот пример простой конфигурации Nginx для решения нашей проблемы:

server {
    listen 80; # Порт, на котором будет слушать прокси
    server_name ваш_домен_или_ip_прокси;

    location / {
        proxy_pass http://адрес_вашего_1с_сервера; # Адрес вашего 1С веб-сервиса
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # *** Удаление "Bearer " из заголовка Authorization ***
        proxy_set_header Authorization $http_authorization;
        sub_filter 'Bearer ' ''; # Заменяем "Bearer " на пустую строку
        sub_filter_once on; # Применяем замену только один раз
    }
}

Пояснения к конфигурации Nginx:

  • listen 80;: Прокси-сервер будет принимать запросы на 80 порту (измените при необходимости).

  • server_name ваш_домен_или_ip_прокси;: Укажите доменное имя или IP-адрес вашего прокси-сервера.

  • proxy_pass http://адрес_вашего_1с_сервера;: Укажите адрес вашего 1С веб-сервиса (например, http://192.168.1.10:8080).

  • proxy_set_header ...: Передача оригинальных заголовков запроса на 1С сервер.

  • proxy_set_header Authorization $http_authorization;: Передача заголовка Authorization.

  • sub_filter 'Bearer ' '';: Ключевая строка! Использует модуль ngx_http_sub_module для замены подстроки "Bearer " (с пробелом) на пустую строку в заголовке Authorization.

  • sub_filter_once on;: Применяет замену только один раз.

2. Настройка прокси на Apache:

Если вы используете Apache, настройка прокси также проста, используя модуль mod_headers:

 <VirtualHost *:80>
    ServerName ваш_домен_прокси_сервера.ru

    ProxyPass / http://адрес_вашего_1с_сервера/ # Адрес вашего 1С веб-сервиса
    ProxyPassReverse / http://адрес_вашего_1с_сервера/

    # *** Удаление "Bearer " из заголовка Authorization ***
    RequestHeader edit Authorization "^Bearer\s+" ""

    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "http"
    RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
</VirtualHost>
    

Пояснения к конфигурации Apache:

  • <VirtualHost *:80>: Настройка VirtualHost на 80 порту.

  • ServerName ваш_домен_прокси_сервера.ru: Укажите доменное имя прокси-сервера.

  • ProxyPass / http://адрес_вашего_1с_сервера/: Проксирование запросов на 1С веб-сервис.

  • RequestHeader edit Authorization "^Bearer\s+" "": Ключевая строка! Использует модуль mod_headers и директиву RequestHeader edit для замены подстроки "Bearer " (с пробелами) на пустую строку в заголовке Authorization. Регулярное выражение "^Bearer\s+" находит "Bearer " в начале строки и удаляет его.

Альтернативные решения (менее предпочтительные):

  • Изменение клиентского приложения: Если у вас есть контроль над клиентским приложением, отправляющим запросы к 1С, вы можете изменить его, чтобы оно отправляло заголовок Authorization без "Bearer " (только токен). Однако это может быть менее "стандартно" и потребовать изменений на стороне клиента.

Модификация кода 1С веб-сервиса: В идеале, нужно найти работающую версию платформы, у меня не взлетело на 8.3.24.1548, 8.3.24.1819, 8.3.25.1546, 8.3.26.1540 . Заработало на 8.3.23.1782. У заказчика был 24 релиз , поэтому пришла такая идея.

Заключение:

Использование прокси-сервера для "адаптации" заголовка Authorization - это эффективный и быстрый способ обойти проблему некорректной обработки "Bearer " в 1С веб-сервисах. Настройка Nginx или Apache в качестве прокси не займет много времени и позволит вашим веб-сервисам корректно работать с современными клиентами, использующими стандартную схему авторизации.

Надеюсь, эта статья поможет вам решить данную проблему. Если у вас возникнут вопросы или дополнения, пожалуйста, оставляйте комментарии!

См. также

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2595    3    0    

10

Администрирование веб-серверов Системный администратор Бесплатно (free)

Как проксировать запросы извне на localhost при помощи IIS.

15.01.2025    910    Miroshh    1    

3

Администрирование веб-серверов Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Узбекистан Абонемент ($m)

Внешняя обработка, подходит для любых конфигураций. Поддерживает apache и iis! Публикуйте базы легко и просто!

1 стартмани

22.11.2024    2101    37    Rafael-87    36    

32

Администрирование веб-серверов Сервера Системный администратор Программист Абонемент ($m)

WEB приложение для управления сеансами сервера 1С, имеет адаптивный web интерфейс. Возможности: удаление сеансов; завершение rphost процессов; запуск службы 1С сервера (если остановлена). Используется авторизация BasicAuth с защитой от брутфорса. Поддерживает работу по http https протоколам.

1 стартмани

08.11.2024    1209    12    gortrex    2    

3

Администрирование веб-серверов Бесплатно (free)

Ошибка 1С веб-сервис IIS. Ошибка доступа к файлу...183(0x000000B7) Невозможно создать файл, так как он уже существует.

27.09.2024    1094    California_Dreaming    0    

3

Администрирование веб-серверов Системный администратор Бесплатно (free)

В материале описан порядок действий по настройке Apache для работы по защищенному протоколу HTTPS c 1С на операционной системе РедОС с выпуском сертификата SSL.

09.05.2024    3404    artemusII    1    

11

Администрирование веб-серверов Системный администратор Программист Бесплатно (free)

Инструкция, как опубликовать веб-сервис с помощью OSPanel.

06.05.2024    2612    lostcay    0    

6

Администрирование веб-серверов Системный администратор Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Статья описывает алгоритм установки, настройки и "сопряжения" с 1С веб-сервера Apache на РедОС. Статья, может, будет полезна тем, кто ищет в сети работающие алгоритмы установки веб-сервера и публикации на нем информационных баз 1С в контуре операционной системы РедОС. Помимо этого в статье рассмотрены некоторые спорные моменты, для анализа которых не удалось найти достаточно информации в сети.

25.04.2024    4248    artemusII    8    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. markers 278 14.03.25 12:51 Сейчас в теме
Можно сформировать JWT токен в 1с с своими полезными данными (например исходным токеном) и 1с не только примет его, но и автоматически авторизует, под нужным пользователем.
В вашем веб-сервисе (кто получает запросы), потребуется дополнительные 3 строчки, которые возьмут полезные данные (оригинальный токен) из JWT.
Клиенту же, нужно будет просто использовать JWT токен, вместо старого. Ни каких изменений не требуется
3. ak0710 166 14.03.25 13:27 Сейчас в теме
(1)
ем веб-сервисе (кто получает запросы), потребуется дополнительные 3 строчки, которые возьмут полезные данные (оригинальный токен)


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

Я может вас не понял. Любой токен вы отправляете с заголовком Bearer + Пробел + Токен выходит ошибка формата потока , веб сервер Апач, ИИС, выкидывает в ошибку 500. В отладку сервисов не доходит. Точка останова не останавливается. Вы эту проблему предлагаете так решить?

Со стороны клиента никак не поменять, там крупный вендор
4. markers 278 14.03.25 13:41 Сейчас в теме
(3) Тогда скорее я не правильно понял задачу вашу, извините.
С телефона читал, вероятно не внимательно прочел.
2. ak0710 166 14.03.25 13:21 Сейчас в теме
У меня сервис Яндекс Еда, они там не меняют запрос под каждого партнера, ошибку решать нужно было на своей стороне
Оставьте свое сообщение