При входе в 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 на 

&lt;add key="UseCsrfToken" value="false" /&gt;

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.
Раньше осуществляли авторизацию по примеру из данной темы (https://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" решило все вопросы.

Показать все комментарии

Добрый день. немогу выполнить вход в терасофт появляется окно дебагера скрин

Нравится

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

Мне кажется, для начала нужно почистить профиль и кэш:

  • Закрыть Terrasoft
  • Удалить содержимое папки %appdata%\Terrasoft\3.4.0\Profile\
  • Удалить содержимое папки %appdata%\Terrasoft\3.4.0\Cache\
  • Запустить Terrasoft

"Зверев Александр" написал:

Мне кажется, для начала нужно почистить профиль и кэш:

  • Закрыть Terrasoft
  • Удалить содержимое папки %appdata%\Terrasoft\3.4.0\Profile\
  • Удалить содержимое папки %appdata%\Terrasoft\3.4.0\Cache\
  • Запустить Terrasoft

выполнено, не помогает

А что будет, если не запускать отладчик, а продолжить выполнение? До открытия главного окна дойдёт?

Показать все комментарии

Здравствуйте!

При попытке авторизации выдается сообщение "Ошибка авторизации"

в строке адреса

http://192.168.0.77:7000/?DisableAutoLogin=&ReturnUrl=%2f0%2fNui%2fViewModule.aspx&ErrorCode=0

В отладчике на вкладке сеть

http://softex-iis:7000/0/ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a&ActiveTabId=PageContainer_c02e0ec6f36b14108882485b39c5f8dd_045063c98180e011afbc00155d04320c_7c0581929880e011afbc00155d04320c

Status Code:302 Found
Request Headersview source

Set-Cookie:.ASPXAUTH=AC0D8B61C22BBBB6D5ECC984350B184A2A56C93B59107CAEE771322332F36565625F4131E70D3B79D2E85950C877DD281B2FE2F93720AC6BEF76C2C813189EC3716130B5FF183264EFEC13D3C9D6CFBE32B3B3186FDE99C6FF2C61C1D06EAF1D20ED5D6C0B203E3EFA1F10F469305BFE70963A009067170D19AB9A174868DFA221F55A8F0513C360A8A9DB3C75EF492888DB35B6BA7B7774111CAE4AC563DEF1B7773E9449B062CBECC487D6C0223D7B24DBD4060E77157DBEFD66E7B98005D79F4D985BB69AB06F561A8A1FC0267D6B739A8FCB0408C136032C98E999CBEDE2171A573D6372DCFD8C4768EB28C8072C15F93BB5; path=/; HttpOnly
Set-Cookie:.ASPXAUTH=AC0D8B61C22BBBB6D5ECC984350B184A2A56C93B59107CAEE771322332F36565625F4131E70D3B79D2E85950C877DD281B2FE2F93720AC6BEF76C2C813189EC3716130B5FF183264EFEC13D3C9D6CFBE32B3B3186FDE99C6FF2C61C1D06EAF1D20ED5D6C0B203E3EFA1F10F469305BFE70963A009067170D19AB9A174868DFA221F55A8F0513C360A8A9DB3C75EF492888DB35B6BA7B7774111CAE4AC563DEF1B7773E9449B062CBECC487D6C0223D7B24DBD4060E77157DBEFD66E7B98005D79F4D985BB69AB06F561A8A1FC0267D6B739A8FCB0408C136032C98E999CBEDE2171A573D6372DCFD8C4768EB28C8072C15F93BB5; path=/; HttpOnly

Set-Cookie:BPMSESSIONID=qripp0ch5jp3uvfzokswqxms; expires=Mon, 30-Sep-2013 06:30:25 GMT; path=/0

Обратил внимание, что в последней строке Set-Cookie на 1 год меньше текущей даты (30-Sep-2013)
Произошло это после перезапуска сайта на сервере iis и очистки кэша.

В чем может быть проблема?

Нравится

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

Добрый день, Александр!

Ошибка может возникать если указано некорректное время на сервере приложений. Также, необходимо перезапустить Application Pool сайта на IIS сервере.

На сервере время корректное. Пул перезапускал - не помогло.

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

Нашел источник проблемы.
При перезапуске пула приложения в значение кэшируемой системной настройки попало значение null.
При авторизации система пыталась его преобразовать в Guid.

Необходимый параметр найден следующим запросом (из результата смотрим, какой из них пустой)

SELECT SV.SysAdminUnitId, S.Name, SV.Id
  FROM [dbo].[SysSettings] as S
  JOIN dbo.SysSettingsValue as SV on SV.SysSettingsId =  S.Id
  WHERE
  ValueTypeName = 'Lookup' and 
   S.IsCacheable = 1

Исправлено

  update dbo.SysSettingsValue
  set SysAdminUnitId = 'A29A3BA5-4B0D-DE11-9A51-005056C00008' --все пользователи
  where id = '2347BD06-7C30-4A3F-819E-60539FB1B42E' -- id строки, которую нужно править

Спасибо за оперативный звонок.

Показать все комментарии

Изменила связанный контакт пользователя. Лицензия конкурентная. При входе в ТС возникает ошибка: "Ошибка открытия конфигурации. 'Лицензия для модуля 'Common' не найдена", при каждой новой попытке авторизоваться возникает эта ошибка, но название модуля постоянно меняется.

Нравится

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

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

Показать все комментарии

Здравствуйте!
после установки BPMOnline 5.4 demo при авторизации под пользователем "Пользователь 1" получаю следующую ошибку

Ошибка авторизации
Вы ввели неправильный логин или пароль, либо Ваша учетная запись неактивна

возможно, что-то упустил при настройке IIS? (IIS 6.1)

Нравится

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

Здравствуйте Ростислав!
Попробуйте при авторизации использовать логин Supervisor.

Здравствуйте, Дмитрий! пробовал этот вариант - не помогает. такое ощущение, что проблемы или с подключением к базе или с самой базой. может быть на это влияют какие-нибудь настройки redis или iis ?

Хорошо, тогда попробуйте добавить в SQL администратора Supervisor (sysadmin - параметр и SQL-й логин), после этого не забудьте заменить в ConnectionStrings.config - Integrated Security = SSPI на User ID = Supervisor.

Если не получится сообщите мне свой контакт для связи.

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

Показать все комментарии