Вопрос

Добрый день,

 

При попытке зайти в Террасофт установленный на сервере (Windows Server 2008 R2 Enterprise), возникает ошибка:

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

Также было замечено, что при добавлении новой конфигурации при нажатии на кнопку выбора имени драйверов Oracle (Home) возникает другая ошибка:

Насколько я понял проблема возникает из-за того, что на сервере были установлены несколько версий Oracle и в данный момент версия 11.2.0 отсутствует на сервере. Вместо нее установлена версия 12.2.

Попытка очистить следы Oracle 11.2.0 и в дальнейшем даже переустановка Oracle привела лишь к тому что в данный момент выходит пустой список в котором невозможно выбрать версию Oracle:

 

Прошу помочь в решении данной проблемы.

 

Благодарю.

 

P. S. По возможности помогите пожалуйста найти инструкцию по бэкапу Terrasoft 3.3, для попытки переустановки Terrasoft, чтобы решить вышеуказанную проблему.

У меня такой же вопрос

3 комментария

Обратите внимание на рекомендацию по поводу «Ошибка открытия конфигурации: Cannot find OCI DLL»:

Для приложения Terrasoft под Oracle обязательно необходимо, чтобы на компьютерах всех пользователей, использующих конкурентные лицензии, был установлен клиент Oracle одной и той же версии. Имя сервера на компьютерах всех пользователей должно совпадать с именем, указанным в поле [Сервер] окна редактирования строки соединения компьютера, на котором заказывают и загружают лицензии, и данный сервер должен быть зарегистрирован. Имя сервера прописывается в файле tnsnames.ora, расположенном в инсталляционной директории клиента Oracle (например, d:/oracle/ora92/network/admin/ tnsnames.ora).

Также версия ядра 3.3.2.120 далеко не самая новая, есть смысл попробовать на последних файлах 3.3.2.313, поскольку в версии 175 и выше вносились изменения в механизм работы с сервером сессий для Oracle.

По вопросу разворачивания базы с нуля из бекапа, идущего с дистрибутивом есть раздел в руководстве администратора.

Для получения бекапа существующей базы нужно воспользоваться средствами СУБД, а также не забыть автоматически перенести или вручную завести пользователей с такими же именами, как в базе, на уровне сервера БД. Именно для Oracle инструкции не встречал. Например, для MS SQL это делается так. Если забыть перенести, то пустит только администратора SYS.

Зверев Александр пишет:
Для приложения Terrasoft под Oracle обязательно необходимо, чтобы на компьютерах всех пользователей, использующих конкурентные лицензии, был установлен клиент Oracle одной и той же версии. Имя сервера на компьютерах всех пользователей должно совпадать с именем, указанным в поле [Сервер] окна редактирования строки соединения компьютера, на котором заказывают и загружают лицензии, и данный сервер должен быть зарегистрирован. Имя сервера прописывается в файле tnsnames.ora, расположенном в инсталляционной директории клиента Oracle (например, d:/oracle/ora92/network/admin/ tnsnames.ora).

Добрый день. Данная проблема наблюдается на самом сервере (невозможно зайти в Terrasoft установленный на сервере).

По поводу бэкапа, посмотрю, большое спасибо за помощь.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте, я вроде все сделал по инструкций вроде он за работал открываеться все как полеженно но не могу войти дальше. 

вот такая ошибка в консоли 

 

 

У меня такой же вопрос

6 комментариев
Лучший ответ

LuBiTeL,

Пройдитесь ещё раз по инструкции по разворачиванию приложения on-site и проверьте, чтобы все необходимые компоненты Windows из списка были установлены.

Добрый день! Посмотрите эти темы:

https://community.terrasoft.ru/questions/ne-rabotaet-novaa-stranica-logina и 

https://community.terrasoft.ru/questions/ne-vhodit-v-sistemu

 

А еще на своем скриншоте вы раскрыли адрес сайта и пароль к нему. Будьте аккуратее.

Дмитрий А.,

Здравствуйте, я по читал вроде все установленно. оброзом все в порядке по сколько я его разворачивал на vbox и все работала а тут я не пойму все тоже самое ( 

LuBiTeL,

Пройдитесь ещё раз по инструкции по разворачиванию приложения on-site и проверьте, чтобы все необходимые компоненты Windows из списка были установлены.

спасибо разобрался. 

LuBiTeL,как ? у меня такая же ошибка

 

Vladimir.D,

перепроверь просто все ли компоненты, я из вкладки iis установил

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Возможно ли использование JWT авторизации для подключения веб сервиса, а так же для доступа к API BPM?

У меня такой же вопрос

1 комментарий

Нет, JWT не поддерживается. 

При интеграции bpm’online с веб-сервисами поддерживается два типа аутентификации: базовая и OAuth 2.0.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день.

Есть такой случай: есть сервис где для авторизации нужно постом отправить данные clientID, secretID и grant_type, а в ответ приходит токен, тип токена и скрок действия токена. Для вызова других методов этого api нужно в header передавать Authorization : "тип токена" "токен". 

Допустим, для использования этого аpi, создаем процесс который по времени будет обновлять токен и сохранять его например в системную переменную(настройку). Но как с помощью веб-сервисов сделать запрос  и вставить в него header с "Authorization" ?

У меня такой же вопрос

4 комментария

Сергей приветствую

Способ авторизации у вас отличен от OAuth2? Каким способов Авторизации вы пользуетесь при работе с Веб-сервисом? немного этого не допонял. Спаисбо.

Власов Михаил Викторович,

Добрый день Михаил вот документации  https://sendpulse.ua/integrations/api#url но увы я не вижу  там описания какой версии OAuth2

Немного покопавшись в интернете и сопоставив с  документацие - сделал вывод, что там описан метод авторизации "Bearer token". А из коробки bpmonline готовой реализации такой авторизации нету.

Если речь об обращению к стороннему сервису в C#-коде, то в стандартных примерах  есть добавление в заголовки токена BPMCSRF:

// Добавление CSRF токена в заголовок запроса.
CookieCollection cookieCollection = AuthCookie.GetCookies(new Uri(authServiceUri));
string csrfToken = cookieCollection["BPMCSRF"].Value;
updateRequest.Headers.Add("BPMCSRF", csrfToken);

А в готовом элементе БП по вызову веб-сервиса есть только базовая аутентификация  и OAuth 2.0.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

При входе в BPM появляется ошибка авторизации, подскажите, как это можно исправить.

Версия BPMonline 7.2 (почему-то нельзя выбрать на форуме при создании вопроса)

Чистка SysUserSession и перезапуск IIS не помогают.

Скрин прилагается.

У меня такой же вопрос

6 комментариев

Добрый день, Юрий.

Нужно смотреть профиль пользователя Supervisor. Скорее всего у него был удален контакт, также стоит проверить активен ли он, в каких группах состоит и какие лицензии ему розданы. Это может сделать другой системный администратор. Если же Supervisor был единственным сисадмином - тогда это нужно проверить напрямую в БД.

Контакт присутствует. Роли и лицензии прикладываю.

Иногда бывает, что проблема сама проходит, но на данный момент ошибка всё еще воспроизводится.

 

 

 

 

 

2018-06-06 17:47:34,916 [11752] INFO OperationLogger LogUserLoginError - Отказ авторизации пользователя Supervisor. IP-адрес: ::1. Причина отказа: LicHelper не проинициализирован

2018-06-06 17:58:19,398 [6408] ERROR ..\tz-user-1 Terrasoft.WebApp.Loader.FileWebEventProvider RaiseInternal - Date: 06.06.2018 17:58:19
Date (UTC): 06.06.2018 13:58:19

Exception Message: Профиль пользователя является временным профилем.

Exception Type: System.Security.Cryptography.CryptographicException
Exception Source: mscorlib

Exception Stack Trace:
   в System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
   в System.Security.Cryptography.Utils.get_StaticDssProvHandle()
   в System.Security.Cryptography.DSACryptoServiceProvider.ImportParameters(DSAParameters parameters)
   в System.Security.Cryptography.DSA.FromXmlString(String xmlString)
   в Terrasoft.Common.DSACryptoServiceProvider.VerifyData(String data, String signedData, String publicKey)
   в Terrasoft.Core.LicHelper.CheckLicKey(String packageName, Int32 licCount, DateTime startDate, DateTime dueDate, String licKey, String publicKey, Int32 licType, Int32 sspSchemaCount, Int32 sspAdministratedSchemaCount)
   в Terrasoft.Core.LicHelper.GetUserValidPackages(Guid userId, Boolean throwLicExceptions)
   в Terrasoft.Core.LicHelper.InitializeSysPackages()
   в Terrasoft.Core.UserConnection.get_LicHelper()

SessionID: i3z1jgifmbms21gocshfzshy
Request URL: /Lic/LicManager.aspx
Request Path: /Lic/LicManager.aspx
Request Type: GET
User Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
User Host Address: ::1
User: Supervisor
Is Authenticated: True
Authentication Type: Forms
Is Secure Connection: False
 

удалось победить, создав постоянный профиль для пользователя

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день, Коллеги!

Изучили ряд тем на сообществе по данному вопросу и попробовали воспроизвести кейс из данной темы:

https://community.terrasoft.ru/questions/anonimnaa-autentifikacia-vnesn…

Сделали всё в точности как описано в примере, включая настройку web-конфигов. 

Сервис:

namespace Terrasoft.Configuration
{
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Data;
 using System.Linq;
 using System.Security;
 using System.ServiceModel;
 using System.ServiceModel.Web;
 using System.ServiceModel.Activation;
 using System.Web;
 using Terrasoft;
 using Terrasoft.Common;
 using Terrasoft.Common.Json;
 using Terrasoft.Core;
 using Terrasoft.Core.DB;
 using Terrasoft.Core.Entities;
 using Terrasoft.Core.Store;
 using Newtonsoft.Json;
 
 using Terrasoft.Web.Common;
 
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class UsrGreetingService : BaseService //,System.Web.SessionState.IReadOnlySessionState
    {

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Hello", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        public string TestHello()
        {
            return "Hello!!!!!!!!!!!!!!!!!";
        }
        

        [OperationContract]
        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Xml)]
        public string TestHelloXml()
        {
            return "Hello!!!!!!!!!!!!!!!!!";
        }
        
        [OperationContract]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
        public string TestPostJson()
        {
            return "Hello!!!!!!!!!!!!!!!!!";
        }



        
 //       private UserConnection _userConnection;
  /// <summary>
  /// </summary>
// private UserConnection UserConnection {
//  get {
//   return _userConnection ?? (_userConnection = HttpContext.Current.Session["UserConnection"] as UserConnection);
 //  }
// }
    }
}

 

В результате попробовали отправить запрос через POSTMAN

1) Если указать метод GET без авторизационных Cookie, то всё работает

Как пример можно получить результат запроса по ссылке:

http://93.188.21.108:2022/0/ServiceModel/UsrGreetingService.svc/Hello

 

2) Указываем метод POST без авторизационных Cookie, то получаем 403:

 

 

Если же добавить к запросу(метод POST) авторизационные Cookie, то всё работает...

Коллеги, прошу подсказать, что именно делаем не так?

 

У меня такой же вопрос

2 комментария

Добрый день, 

Проверьте включена ли на сайте CSRF-защита. В внешнем и внутреннем Web.config есть атрибут UseCsrfToken, содержит значение true то можно поступить следующим образом: 

1. Изменить значение UseCsrfToken в Web.config и WebApp/Web.config на 

<add key="UseCsrfToken" value="false" />

2. В хедере запроса отправлять Csrf-токен. Следующим образов (в случае безавторизационного сервиса, авторизацитонные куки можно не отправлять):

Tsopa,

Спасибо большое! Решили проблему получением и отправкой

авторизацитонных куков!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги, всем добрый день!

Может кто-нибудь сталкивался с требованием заказчика сделать доступ к Redis закрытым, т.е. установить пароль на доступ.

На стороне redis, насколько я понимаю, нужно включить в redis.conf настройку requirepass, а как реализовать это на стороне нашего приложения? В ТП ответили так: "поскольку это стороннее ПО, с данным вопросом обратитесь к поставщику продукта redis. Мы предоставляем поддержку продукта bpm'online."

У меня такой же вопрос

3 комментария

попробуйте по аналогии с ConnectionString из StackExchange

<add name="redis" connectionString="name=user;password=123;host=localhost;db=1;port=6379;maxReadPoolSize=25;maxWritePoolSize=25" />

в любом случае дайте знать получилось или нет :)

Севостьянов Илья Сергеевич,

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

Илья, моему коллеге удалось найти ответ на данный вопрос:
<add name="redis" connectionString="host=password@127.0.0.1;db=1;port=6379;maxReadPoolSize=25;maxWritePoolSize=25" />

ответ был найден здесь: https://stackoverflow.com/questions/8862552/authenticated-servicestack-…

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день, сегодня ночью BPMonline обновилась до версии 7.10 и перестала работать авторизация: 403 - Forbidden: Access is denied. You do not have permission to view this directory or page using the credentials that you supplied.
Раньше осуществляли авторизацию по примеру из данной темы (http://www.community.terrasoft.ru/forum/topic/9613).
Можете, пожалуйста скинуть пример авторизации на php c добавлением CSRF-токена в заголовок запроса.

У меня такой же вопрос

3 комментария

Здравствуйте, Мария!

Готового запроса нет - его нужно писать. Если у вас получится, пожалуйста, поделитесь.

Спасибо за ответ.
получилось подкорректировать POST запрос, добавили вытягивание токена из файла:

$file = "cookie.txt";
$lines = file( $file ); 
$str =  $lines[6]; 
$prefix = "BPMCSRF";
$index = strpos($str, $prefix) + strlen($prefix);
$token = trim(substr($str, $index));

и добавили в заголовок:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json;odata=verbose',
		'BPMCSRF:' .  $token,
        'Content-Length: ' . strlen($json))
);

После обновления необходимо теперь добавить CSRF токен
Есть пакет который уже предоставляет интерфейс для BPM

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги, приветствую.

Собственно вопрос - как разрешить удаленный вызов процедур Web- сервиса? Есть простой WCF Web- сервис, на его основе получен WSDL, из которого сгенерированы прокси- классы. Эти прокси- классы использует простой консольный клиент, например, просто вернуть строку с сервера - вылетает окно:

Судя по ссылке, запрос не проходит авторизацию, хотя в Terrasoft.WebApp\Web.config указано, что:

 
   
     
       
     

   

 

Как отключить авторизацию для RPC?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

У меня такой же вопрос

9 комментариев

Переехали решать задачу в рамках технической поддержки:smile:

Здравствуйте, Алексей! Спасибо! :smile:

Вот некоторые подробности.

1. В \Terrasoft.WebApp\ServiceModel добавил UsrService.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="Terrasoft.WebApp.ServiceModel.UsrService" CodeBehind="UsrService.svc.cs" %>

2. В \Terrasoft.WebApp\Web.config добавил:

  <appSettings>
    ...
    <add key="AllowedLocations" value="...;ServiceModel/UsrService.svc"/>
   ...
  </appSettings>
 
  ...
 
  <location path="ServiceModel/UsrService.svc">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
   ...

Контракт Web- сервиса в конфигурации (UsrIService.svc):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
 
namespace SimpleCustomService
{
    [ServiceContract]
    public interface UsrIService
    {
        [OperationContract]
        string SPMClientInfo();
    }
}

Реализация Web- сервиса в конфигурации (UsrService.svc):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
 
namespace SimpleCustomService
{
    public class UsrService : UsrIService
    {
        public string SPMClientInfo()
        {
            return "test string";
        }
    }
}

В \Terrasoft.WebApp\ServiceModel\http\services.config добавил:

...
 	<service behaviorConfiguration="BaseServiceBehavior" name="SimpleCustomService.UsrService">
        	<endpoint name="UsrServiceEndPoint"
           		binding="webHttpBinding"
           		behaviorConfiguration="RestServiceBehavior"
           		bindingNamespace="http://Terrasoft.WebApp.ServiceModel"
           		contract="SimpleCustomService.UsrIService" />
	        <endpoint address="soap" binding="basicHttpBinding" contract="SimpleCustomService.UsrIService"/>
	        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    	</service>
...

Нашел вот статью, попробую сделать как там описано. Аутентификация внешних запросов к веб-сервисам bpm'online

Отличная статья, как я теперь могу вызвать метод Web- сервиса, используя AuthCookie? Должен- ли я менять код Web- сервиса, чтобы аутентифицировать внешние запросы?

Здравствуйте.
Обратите внимание на ресурс: http://stackoverflow.com/questions/16028014/how-can-i-pass-a-username-p…

Здравствуйте, Александр! Спасибо большое за ответ, попробую сделать так.

Возвращаясь к началу, хочу отметить одну интересную деталь - если в Visual Studio попытаться добавить ссылку на WSDL (Add Web Reference), то получим такое вот окно:

URL тот же самый, что и в консоли:

http://localhost:8080/NuiLogin.aspx?ReturnUrl=%2f0%2fServiceModel%2fSimpleCustomService.svc

Здравствуйте, Алексей!

Даже если сделать так?

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!
Такая ситуация:

1) Настроена синхронизация с LDAP, пользователи и контакты добавляются, лицензии назначены, но в систему войти под доменныйм паролем не удается. Неверное имя пользователя, причем если через базу сделать update пароля для LDAP-пользователя (ну взять от suervisor например), то система радостно запускает сотрудника.

2) Для импортируемых иp LDAP пользователей контрагент автоматически проставляется, а должность и тип "Сотрудник" нет.

Подскажите, в какую сторону копать?
Спасибо

У меня такой же вопрос

2 комментария

Здравствуйте.
1) При LDAP-авторизации BPM'online проверяет пароль не в базе данных, а обращается к домену и если получает ответ, что учётные данные пользователя корректны - разрешает вход в систему. Для возможности LDAP-авторизации нужно кроме настройки синхронизации, добавить в конфигурационный файл web.config (находится в корне директории с файлами сайта) провайдер авторизации - Ldap (важен регистр).
Пример:

 <auth providerNames="InternalUserPassword,Ldap"

2) Для того, что бы проставлялась должность, точно такое же название должно быть в справочнике должностей. Что касается тип "Сотрудник" у контакта пользователя, то это не является обязательным условием для возможности авторизации.

Спасибо, Александр.
Добавление auth providerNames="InternalUserPassword,Ldap" решило все вопросы.

Войдите или зарегистрируйтесь, чтобы комментировать