Имя: Пароль:
1C
1С v8
HTTP-сервис в расширении - что ему надо для запуска
0 bolero
 
12.02.19
11:05
К типовой УТ11 сделал расширение.

В расширении HTTP сервис и роль.
У роли права "Использование" на все методы HTTP-сервиса проставлены.

Создал профиль групп доступа с этой ролью и галочкой "Запуск внешнего соединения". Добавил группу доступа к пользователю, который и так уже был администратором

В default.vrd прописал все варианты наименования сервиса:


<httpServices publishExtensionsByDefault="true">
  <service name="ПересчитатьИтоги" enable="true"/>
  <service name="ПересчитатьИтоги" rootUrl="RecalcTotals" enable="true"/>
  <service name="ЦЗПрава_ПересчитатьИтоги" enable="true"/>
  <service name="ЦЗПРава_ПересчитатьИтоги" rootUrl="RecalcTotals" enable="true"/>
  <service rootUrl="RecalcTotals" enable="true"/>
</httpServices>


/c ЗапуститьОбновлениеИнформационнойБазы сделал

Все равно получаю 403 Недостаточно прав для использования ресурса с данным HTTP методом.

Для сравнения, встроенный в конфу HTTP-сервис отрабатывает.

Чего ему надобно??
1 bolero
 
12.02.19
11:17
В отладчике до обработчика не доходит, по ошибке не останавливается.

В ЖР только три записи:
Сеанс. Начало; Сеанс. Аутентификация и через 20 секунд Сеанс. Завершение.

20 секунд - это session reuse timeout по-умолчанию.
2 Мыш
 
12.02.19
11:27
(0) Ставлю дайм, коннектится под пользователем, от имени которого работает веб-сервер
3 bolero
 
12.02.19
11:47
(2) веб-сервер работает от системного пользователя httpd, и находится на машине, отдельной от сервера 1с и клиента 1с

К HTTP-сервису пытаюсь прицепиться, используя http auth basic, указывая имя пользователя и пароль пользователя 1с, и то и другое только латиница.

URL полностью латиница.
4 Мыш
 
12.02.19
11:50
(3) Заведи в базе пользователя servername\httpd$
Не забудь про доллар.
5 bolero
 
12.02.19
11:59
(4) да едрён батон

имя пользователя 1С передается корректно, сеанс создается - видно в ЖР

У httpd нет пароля на linux-хосте, где он запущен, потому что пользователь системный. С каким паролем мне его, по-твоему, заводить в 1С?
6 Мыш
 
12.02.19
12:10
(5) А, так веб под линухом. На винде системный без пароля заходит через пользователя ос.

Сеанс создается, хорошо. Попробуй программно назначить пользователю роль из расширения. Не через группу доступа, а программно.
7 Мыш
 
12.02.19
12:14
+(6) В конфигураторе у этого пользователя должен стоять флаг <Роли, добавленные расширениями конфигурации>
8 trantor77
 
12.02.19
12:49
Включить технологический журнал и посмотреть логи.
Посмотреть логи на веб-сервере.
9 bolero
 
12.02.19
12:50
(7) во, вот это по делу, спасибо!

У пользователя-администратора с полными правами какие группы не добавляй - ролей не прибавляется, их остается ровно две: Администратор системы и Полные права.

Через конфигуратор галочка <Роли, добавленные расширениями конфигурации> для пользователя-администратора даже не появляется, поэтому нажать ее не могу.

Сейчас пытаю счастья с ПриЗаполненииПоставляемыхПрофилейГруппДоступа(), но похоже счастья не будет.
10 bolero
 
12.02.19
12:51
** мне нужно именно админу дать доступ к этому сервису
11 Юрий Лазаренко
 
12.02.19
12:53
А что в коде http-сервиса? Может там нет прав на чтение каких-то объектов конфигурации?
12 Мыш
 
12.02.19
12:53
(9) Дык это, роли из расширения только так, вроде:

Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Пользователь.Роли.Добавить(Метаданные.Роли.РольИзРасширения);
Пользователь.Записать();
13 Мыш
 
12.02.19
12:55
(11) Не, у него именно роль из расширения не назначена пользователю.
14 bolero
 
12.02.19
13:56
(12) Спасибо, взлетело!

В этом же HTTP-сервисе в соседний метод вставил:


Функция update_POST(Запрос)
    УстановитьПривилегированныйРежим(Истина);
    Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени("admin3");
    Пользователь.Роли.Добавить(Метаданные.Роли.ЦЗПрава_HTTP_Сервисы);
    Пользователь.Записать();
    УстановитьПривилегированныйРежим(Ложь);

    Ответ = Новый HTTPСервисОтвет(200);
    Возврат Ответ;
КонецФункции


Один раз после подключения расширения запустить этот метод от обычного пользователя с профилем, а потом можно работать от нужного.