Добрый день!
В дизайнере системы есть возможность создать веб-сервис.

Там есть разные варианты аутентификации. Подсажите, пожалуйста, на сервисе пром юа

такая аутентификация Bearer :

`Authorization`:` Bearer 19efbdc8ee723b7eb9e6dae1f7a20ca4378b288c`

где `19efbdc8ee723b7eb9e6dae1f7a20ca4378b288c` - ваш уникальный ключ (токен) авторизации.

Пример запроса:

`https://my.prom.ua/api/v1/products/list?limit=5`

Можно в этом конструкторе так аутентифицироваться? Если да, какой метод использовать из предложенных?

Нравится

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

В параметрах вызова добавить метод. В методе указать что это Параметр заголовка, код Authorization, значение 19efbdc8ee723b7eb9e6dae1f7a20ca4378b288c.

В вашем варианте авторизация осуществляет просто передачей токена в headers.

Такого способа сейчас стандартно, к сожалению, не предусмотрено. Ранее была зарегистрирована идея о добавлении новых способов авторизации, в том числе и Bearer​​​​​​.

 

По вопросу интеграции с Prom обратите внимание на дополнение, умеющее с ним работать, я писал в соседней теме.

 

Если так, как предложил Евгений, полноценно работает, можно использовать.

 

Полозюков Евгений Петрович,Спасибо, но не совсем. значение надо было указать c припиской метода авторизации, вот так - Bearer 5430b**********315955c2754

Подскажите, п можно как-то процессом обработать ответ (коллекцию). В данном запросе я получил ответ со списком продуктов, могу как-то впроцессе его или обновить или создать, если нет такого?

А какая у Вас версия системы? В 7.16.4 расширили возможности работы с коллекциями:

Добавлена возможность пользовательскими средствами создать параметр процесса типа “Коллекция записей” и настроить его структуру (создать вложенные параметры). Например, параметр “Коллекция записей” можно использовать в следующих случаях:

 

Если при выполнении элемента [Задание сценарий] была сформирована коллекция записей, то можно ее передать в параметр процесса и далее обработать пользовательскими средствами.

 

При запуске бизнес-процесса из C# или JS-кода коллекцию записей можно передать во входящий параметр и обработать в ходе процесса.

 

Данный параметр можно использовать, если необходимо передать коллекцию записей между процессами.

Пример настройки структуры параметра “Коллекция записей”

mi_subprocess_parameters.png

Больше о том, как работать с коллекциями, см. тут и тут

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

Добрый день!

Существует проблема следующего характера:

В целях безопасности пароль от учетной записи Exchange меняется раз в неделю. Пользователи не знают свой пароль, заходят через Active Directory.

 

Есть ли способ проходить авторизацию через AD? Возможно, кто-то решал эту проблему?

Нравится

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

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

 

На данный момент решение в коробке не реализовано.
Рекомендуем переход на O365 и использование там либо пароля для приложения (не зависит от пароля в домене), либо OAuth2.0.

 

Также обратите внимание на аналогичное обсуждение в прошлом году.

 

Мотков Илья,

Добрый день, подскажите, планируется ли это реализовать? Есть такая задача на какой-то конкретный релиз?
Если нет, можете ли что-то подсказать по реализации?

Артём, нет, не планируется. Используйте обходные варианты.

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

Добрый день.
Планируем использовать свой конфигурационный сервис для интеграции со сторонним приложением. Стороннее приложение всегда будет аутентифиицироваться под одним и тем же пользователем в BPMonline. В связи с этим хотелось бы оптимизировать этот процесс.
 
Как показывают тесты, выполнение логина каждый раз перед обращение к конфигурационному сервису сильно замедляет процесс получения полезного ответа (примерно в 2 раза), увеличивает трафик, нагрузку на сервер приложений и тд. 
В связи с этим пара вопросов:
1. Как регулярно нужно аутентифицироваться в BPMonline ?
2. Можно ли перед тем как обращаться к конфигурационному сервису как-то убедиться, что аутентификация успешно выполнена и непросрочена, не посылая дополнительных запросов в BPM?

Вот такой код не работает, поскольку свойства Expires и Expired заполняются только у куки UserName и там примерно сутки время жизни, а 401 ошибку мы начинаем получать гораздо раньше

       public static bool CheckCookiesValid()
        {
            var cookieContainer = LoginClass.AuthCookie;
            var cookies = cookieContainer.GetCookies(new Uri(serviceUri));
            if (cookies.Count < 4)
            {
                return false;
            }
            foreach (Cookie cookie in cookies)
            {
                if (cookie.Expired)
                {
                    return false;
                }
             }
            return true;
        }

или же не стоит с этим всем заморачиваться и просто каждый раз перед обращением к сервису делать LoginClass.TryLogin ?

полный исходник прилагаю

Прикрепленные файлы

Нравится

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

Каждый раз авторизироваться точно не стоит, это захламляет таблицу SysUserSession, которая вырастает до огромного объёма и каждая вставка в неё проходит всё тяжелее.

Пример работы с авторизацией, а затем с данными по интеграции есть в академии.

Прерывание сессии раньше срока может быть вызвано различными причинами, например, очисткой Redis на сервере. Если при попытке считать или записать данные выдало об отсутствии авторизации, проще авторизироваться раз повторно и далее работать уже с новыми куками.

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

Добрый день!

Существует проблема следующего характера. На предприятии с большим количеством сотрудников для работы с CRM применяется NTLM аутентификация. Почта в CRM привязана к учетной записи в Exchange. И все вроде бы хорошо, ввел один раз пароль и работаешь.

Но! В в целях безопасности раз в 30 дней сотрудник должен менять пароль от учетной записи. Соответственно пароль от почты автоматически меняется на аналогичный пароль. Авторизация в CRM проходит успешно, но вот для синхронизации почты приходится лезть в настройки и менять пароль. Некоторым пользователям это лень делать, некоторые боятся что-нибудь испортить и т.д. Но это пол беды, из-за того что от пользователя поступает слишком много запросов на авторизацию с неверными данными он блокируется в Active Directory

Есть ли способ автоматически назначать актуальный пароль для синхронизации почты? Если да, то как это это сделать? Возможно кто-нибудь уже сталкивался с подобным.

Нравится

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

Алексей Следь,

И я с таким неоднократно сталкивалась crying

Когда смотрю, что уже прошло больше года задаю вопрос 'когда' повторно, на что получаю ответ - 'Такое пожелание поступило только от Вас, поэтому у него низкий приоритет и мы его пока не рассматриваем на реализацию'.

Если честно, когда постоянно получаешь такие ответы, то понимаешь, что писать какие бы то ни было пожелания нет смысла.

Думаю, что многие пользователи из-за такого подхода уже 'забили' писать свои пожелания и идеи.

Хорошо, что появился маркетплейс bpm'online, и много чего полезного теперь можно найти бесплатно или за небольшие деньги.

Тимур, здравствуйте!

Проговорил описанную проблему с аналитиками продукта. Синхронизация почты в bpmonline работает так, что она сохраняет учетные данные для почтового ящика в базе данных (оригинальное имя пользователя и зашифрованный пароль). Да, на текущий момент система работает так, что после смены пароля пользователя в AD/NTLM нужно менять вручную изменить пароль в bpmonline для почтовых ящиков, чтобы синхронизация почты работала дальше.

Мы зарегистрировали проблему по вашему обращению и передали на анализ команде разработки продукта.

На данный момент в коммуникационной панели отображается соответствующее сообщение если пароль невалидный (см. Рис. 1).

Рис. 1

Вильшанский Дмитрий,

Дмитрий, спасибо за ответ! 
Скажите, пожалуйста, есть ли на текущий момент понимание как реализовать подобную доработку с технической точки зрения? 
И как долго ждать релиза с данным исправлением?

Писал такой же вопрос в техподдержку в сентябре 2018. получил ответ "подобная настройка в текущей версии системы не может быть выполнена по соображениям безопасности. Мы передали данное обращение в команду разработчиков и они рассмотрят возможность изменения логики работы синхронизации почты в будущих версиях."

Прошло почти полгода. Ответ тот же

Сами тоже пока не решили этот вопрос.

Пикулик Тимур,

Немного не так выразился. Имелось ввиду не исправление, а пожелание. На данный момент такой функциональности нет сейчас. Вам необходимо задавать пароль (см. скриншот выше).

Алексей Следь,

И я с таким неоднократно сталкивалась crying

Когда смотрю, что уже прошло больше года задаю вопрос 'когда' повторно, на что получаю ответ - 'Такое пожелание поступило только от Вас, поэтому у него низкий приоритет и мы его пока не рассматриваем на реализацию'.

Если честно, когда постоянно получаешь такие ответы, то понимаешь, что писать какие бы то ни было пожелания нет смысла.

Думаю, что многие пользователи из-за такого подхода уже 'забили' писать свои пожелания и идеи.

Хорошо, что появился маркетплейс bpm'online, и много чего полезного теперь можно найти бесплатно или за небольшие деньги.

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

Коллеги всем доброго времени суток.
Кто нибудь сталкивался с аутентификацией и отправкой внешних запросов на JS?
Как это лучше всего реализовать?
Заранее благодарю!

Нравится

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

Нигрескул Алексей,

Александр прав. Можно написать конфиги, прокинуть сервис без авторизации. И если сайт не в облаке, тогда всё просто, если в облаке - каждое обновление конфиги перетирает. 
Либо типовая авторизация (тот же XMLHttpRequest.1 запрос на получение куки+csrf-токена, последующие запросы - к сервисам, но уже с заголовками)

Не совсем понятно что должно авторизовываться и откуда. С js-кода BPM обратиться на какой-то сервер? (тогда XMLHttpRequest с кучей коллбеков, при условии, что CORS не выскочит)

Или наоборот с условного сайта авторизоваться в BPM? 

Варфоломеев Данила,

Наоборот с условного сайта в BPM, даже не с сайта, а из письма пришедшего на почту. Но я так понял что не получится. Примерно представляю как необходимо реализовать кейс. 

На почту приходит письмо в нем есть условная ссылка которая редиректит на реализованное api из которого уже идет аутентификация с bpm и в bpm кидаются нужные запросы с данными. Как то так. 

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

Нигрескул Алексей,

Александр прав. Можно написать конфиги, прокинуть сервис без авторизации. И если сайт не в облаке, тогда всё просто, если в облаке - каждое обновление конфиги перетирает. 
Либо типовая авторизация (тот же XMLHttpRequest.1 запрос на получение куки+csrf-токена, последующие запросы - к сервисам, но уже с заголовками)

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

Добрый день!

Пытаюсь подключиться к приложению bpmonline из стороннего приложения, а точнее из простого консольного приложения(c#). Действую согласно инструкции.
https://academy.terrasoft.ru/documents/technic-sdk/7-9/autentifikaciya-v...
Проблема в том, что какие бы я не указывала userName и userPassword, метод TryLogin мне всегда возвращает true, хотя через UI я не могу подключиться используя эти же учетные данные. То есть если я указываю корректные данные пользователя bpmonline, то метод tryLogin возвращает true и если я указываю произвольный набор символов в качестве логина и пароля, например, 123 и 321, то метод тоже возвращает true

При попытке вызвать метод в строке браузера (http:///ServiceModel/AuthService.svc/Login) выходит сообщение "Метод не разрешен".

При этом при создании записи из стороннего приложения https://academy.terrasoft.ru/documents/technic-sdk/7-9/dataservice-sozda... если логин/пароль неверны, то создание не проходит, при этом tryLogin все так же возвращает true. Если логин/пароль верны, то создание проходит корректно.

Подскажите, пожалуйста, в чем может быть проблема?
Версия 7.9.0.1228

Нравится

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

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

Прикрепите пожалуйста свой проекта на VS или пример кода.

"Терещук Павел" написал:

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

Прикрепите пожалуйста свой проекта на VS или пример кода.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Terrasoft.Nui.ServiceModel.DataContract;
using Terrasoft.Core.Entities;
using System.Web.Script.Serialization;
using Terrasoft.Common;

namespace trsftTestApp
{
class Program
{
private const string baseUri = "http://192.168.126.72:81";

// Cookie аутентификации bpm'online.
public static CookieContainer AuthCookie = new CookieContainer();
// Строка запроса к методу Login сервиса AuthService.svc.
private const string authServiceUri = baseUri + @"/ServiceModel/AuthService.svc/Login";

static void Main(string[] args)
{
Console.WriteLine(TryLogin("xxxxxxx", "xxxxxxxx"));

}
public static bool TryLogin(string userName, string userPassword)
{
// Создание экземпляра запроса к сервису аутентификации.
var authRequest = HttpWebRequest.Create(authServiceUri) as HttpWebRequest;
// Определение метода запроса.
authRequest.Method = "POST";
// Определение типа контента запроса.
authRequest.ContentType = "application/json";

// Включение использования cookie в запросе.
authRequest.CookieContainer = AuthCookie;

// Помещение в тело запроса учетной информации пользователя.
using (var requesrStream = authRequest.GetRequestStream())
{
using (var writer = new StreamWriter(requesrStream))
{
writer.Write(@"{
""UserName"":""" + userName + @""",
""UserPassword"":""" + userPassword + @"""
}");
}
}
// Получение ответа от сервера. Если аутентификация проходит успешно, в свойство AuthCookie будут
// помещены cookie, которые могут быть использованы для последующих запросов.
using (var response = (HttpWebResponse)authRequest.GetResponse())
{
if (AuthCookie.Count > 0)
{
return true;
}
}
return false;
}

}

}

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

Исправьте условие с if (AuthCookie.Count > 0) на if (AuthCookie.Count > 1)

Здравствуйте
Ориентироваться на количество кук мягко говоря не совсем корректно
Нужно анализировать JSON - объект, который приходит в теле ответа
А именно его свойство Code
Если Code==0, то аутентификация успешна
Иначе ошибка, текст которой можно узнать из свойства Message
В ближайшее время статью на академии исправлю

Привожу правильный исходный код аутентификации для вашего примера
Не забудьте добавить библиотеку System.Web.Extensions в зависимости проекта. Она нужна для парсинга JSON-объекта в ваш экземпляр ResponseStatus

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
//using Terrasoft.Nui.ServiceModel.DataContract;
using Terrasoft.Core.Entities;
//using System.Web.Script.Serialization;
using Terrasoft.Common;
 
namespace trsftTestApp
{
    class ResponseStatus
    {
        public int Code { get; set; }
        public string Message { get; set; }
        public object Exception { get; set; }
        public object PasswordChangeUrl { get; set; }
        public object RedirectUrl { get; set; }
    }
 
    class Program
    {
        private const string baseUri = "http://localhost/bpmonline-7.9.1";
 
        // Cookie аутентификации bpm'online.
        public static CookieContainer AuthCookie = new CookieContainer();
        // Строка запроса к методу Login сервиса AuthService.svc.
        private const string authServiceUri = baseUri + @"/ServiceModel/AuthService.svc/Login";
 
        static void Main(string[] args)
        {
            Console.WriteLine(TryLogin("Supervisor", "Supervisor_1"));
            Console.ReadLine();
 
        }
        public static bool TryLogin(string userName, string userPassword)
        {
            // Создание экземпляра запроса к сервису аутентификации.
            var authRequest = HttpWebRequest.Create(authServiceUri) as HttpWebRequest;
            // Определение метода запроса.
            authRequest.Method = "POST";
            // Определение типа контента запроса.
            authRequest.ContentType = "application/json";
 
            // Включение использования cookie в запросе.
            authRequest.CookieContainer = AuthCookie;
 
            // Помещение в тело запроса учетной информации пользователя.
            using (var requesrStream = authRequest.GetRequestStream())
            {
                using (var writer = new StreamWriter(requesrStream))
                {
                    writer.Write(@"{
""UserName"":""" + userName + @""",
""UserPassword"":""" + userPassword + @"""
}");
                }
            }
            // Получение ответа от сервера. Если аутентификация проходит успешно, в свойство AuthCookie будут
            // помещены cookie, которые могут быть использованы для последующих запросов.
            ResponseStatus status = null;
            using (var response = (HttpWebResponse)authRequest.GetResponse())
            {
                using (var reader = new System.IO.StreamReader(response.GetResponseStream()))
                {
                    string responseText = reader.ReadToEnd();
                    status = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<ResponseStatus>(responseText);
                }
 
            }
            if (status!=null)
            {
                if (status.Code == 0)
                {
                    return true;
                }
 
                Console.WriteLine(status.Message);
            }
            return false;
        }
 
    }
 
}

"Терещук Павел" написал:

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

Исправьте условие с if (AuthCookie.Count > 0) на if (AuthCookie.Count > 1)


Ваш вариант работает. Спасибо!
Подскажите, пожалуйста, почему не работал мой исходный вариант - почему хотя бы одна кука возвращается даже при неуспешной аутентификации? Это особенность terrasoft?
Я брала пример из официальной документации на академии https://academy.terrasoft.ru/documents/technic-sdk/7-9/autentifikaciya-…

"Роман Симута" написал:Здравствуйте
Ориентироваться на количество кук мягко говоря не совсем корректно
Нужно анализировать JSON - объект, который приходит в теле ответа
А именно его свойство Code
Если Code==0, то аутентификация успешна
Иначе ошибка, текст которой можно узнать из свойства Message
В ближайшее время статью на академии исправлю

Большое спасибо! все отработало корректно!

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

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

Пытаюсь аутентифицировать внешние запросы к WCF Web- сервису. Для этого передаю логин и пароль в заголовке SOAP.

using (UsrService client = new UsrService())
{
        client.Credentials = new System.Net.NetworkCredential("Пользователь 1", "Пользователь 1");
        client.SayHello();
}

И Web- сервис и его клиент работают на платформе .NET Framework 4.5.

Запрос не проходит аутентификацию и, насколько я понимаю, происходит редирект на форму логина.

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

Что я вижу в своем консольном клиенте:

С чем это может быть связано?

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

Спасибо.

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

Нравится

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

Если в клиенте я добавляю:

client.AllowAutoRedirect = true;

То в консоли вижу следующее:

Необработанное исключение: System.InvalidOperationException: Клиент обнаружил ти
п содержимого ответа "text/html; charset=utf-8", но ожидается тип "text/xml".
Сбой запроса с сообщением об ошибке:
--
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or
g/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><meta http-equiv="C
ontent-Type" content="text/html; charset=utf-8" /><link href="favicon.ico" rel="
shortcut icon" type="image/vnd.microsoft.icon" /><title>
        bpm'online bank customer journey
</title>
        <style>
                .login-label-logo
                {
                        background: url("terrasoft.axd?s=nui-binary-syssetting&r
=Logoimage");
                        background-repeat: no-repeat;
                        width: 223px;
                        height: 100px;
                        margin-bottom: 28px;
                        background-position: left bottom;
                }
        </style>
<script type="text/javascript">
window.workspaceList = {'1': { value: 'Default', displayValue: 'Default' }};
window.supportInfo = [];
window.supportInfoCaption = '';
window.importantLinks = [];
window.importantLinksCaption = '';
window.productVersion = '7.7.0.2872';
window.loginTimeout = '30000';
window.workspaceCount = 1;
var Terrasoft = Terrasoft || {};
window.isNtlmLoginVisible = false;
</script>
<script type="text/javascript" src="http://localhost:8080//core-sl/3218931132877
873a78c92ded6a0b0cf/Terrasoft.Nui"></script>
<script type="text/javascript">
var Terrasoft = Terrasoft || {};
Terrasoft.loaderBaseUrl = 'http://localhost:8080/';
Terrasoft.workspaceBaseUrl = 'http://localhost:8080/';
</script>
<script type="text/javascript">
var FileAPI = {
        staticPath: '../Resources/ui/FileAPI/',
        flashUrl: '../Resources/ui/FileAPI/FileAPI.flash.swf',
        flashImageUrl: '../Resources/ui/FileAPI/FileAPI.flash.image.swf' };
</script>
<script type="text/javascript">
var Terrasoft = Terrasoft || {};Terrasoft.enablePerformanceManager = false;</scr
ipt>
<!--[if IE 8]>
<script type="text/javascript" src="http://localhost:8080//core/b812d8cf89ec068b
5cdda18f2d0de397/normalize/es5shim.js"></script>
<![endif]-->
<script type="text/javascript" src="http://localhost:8080//core/db7fe0930e6258f0
1fb73405039cc9a5/normalize/classList-shim.js"></script>
<script type="text/javascript" src="http://localhost:8080//core/824fc2789913efd8
506c23cfd39496e8/history/history.js"></script>
<script type="text/javascript" src="http://localhost:8080//core/b515858f8b0235cd
de97a34f56882a5b/combined/all-combined.js"></script>
<link rel="stylesheet" type="text/css" href="http://localhost:8080//core/d9868b8
8e2b56f0964c6c0146598e324/combined/all-combined.css" />
<link rel="stylesheet/less" type="text/css" href="http://localhost:8080//core/7e
1adee4ce5c31795a7bb8819c10aeb8/combined/all-combined.less" />
<script type="text/javascript" src="http://localhost:8080//core/48bca5c68f167104
05127cce054f5534/requirejs/require.js"></script>
<script type="text/javascript">
requirejs.config({
paths: {
'core':'http://localhost:8080//core/ef58ab72c648daaa7af074e2526dffc3/Terrasoft/a
md/core',
'bootstrap':'http://localhost:8080//core/022b4acc49ebfbfb33b54d4f95393d2a/Terras
oft/amd/bootstrap',
'performancecountermanager':'http://localhost:8080//core/3bf271e2ad15f056eac25ab
fea30226a/Terrasoft/amd/performancecountermanager',
'loadbootstrap':'http://localhost:8080//core/b0ebbf0e263a02a3db86bf39761aba1c/Te
rrasoft/amd/bootstrap.login',
'jQuery':'http://localhost:8080//core/8d24859b5ac713ab6f05091492b6c631/jQuery/jQ
uery',
'jQuery-easing':'http://localhost:8080//core/a6f75e0c043a2a087837e5c113cc6f7a/jQ
ueryEasing/jQuery-easing',
'jsrender':'http://localhost:8080//core/77f59dfac75bba6c861fe26d75691086/jsrende
r/jsrender',
'ej-common-all':'http://localhost:8080//core/e8b46aebd6473a2f85386c0d072a2b93/Sy
ncfusion/min/ej-common-all',
'ej-diagram':'http://localhost:8080//core/89f5be5f51b070471058224a6550b99a/Syncf
usion/min/ej-diagram',
'process-schema-diagram':'http://localhost:8080//core/650e4ae64a84c1fd11caab7904
39c8ef/Terrasoft/designers/process-schema-designer/process-schema-diagram',
'process-schema-diagram-5x':'http://localhost:8080//core/b0b08b3ec18e7494d488622
07309479f/Terrasoft/designers/process-schema-designer/process-schema-diagram-5x'
,
'ckeditor-base':'http://localhost:8080//core/04628941838af9176121c9cd4332b49d/CK
Editor/ckeditor',
'html2canvas':'http://localhost:8080//core/524ae0cfb507a786266d32d9a16ccc42/html
2canvas/html2canvas'
},
shim: {'jQuery-easing': {'deps': ['jQuery']}, 'ej-common-all': {'deps': ['jQuery
-easing']}, 'ej-diagram': {'deps': ['ej-common-all', 'jsrender']}, 'process-sche
ma-diagram': {'deps': ['ej-diagram']}, 'process-schema-diagram-5x': {'deps': ['p
rocess-schema-diagram']}}});
require(['loadbootstrap'],function() {});
</script>
<script type="text/javascript">
var Terrasoft = Terrasoft || {};
Terrasoft.isDebug = false;
Terrasoft.DataValueTypeRange = {INTEGER: {maxValue:2147483647,minValue:-21474836
48},FLOAT: {maxValue:79228162514264337593543950335,minValue:-7922816251426433759
3543950335},DATE_TIME: {maxValue:"0001-01-01T00:00:00.000",minValue:"0001-01-01T
00:00:00.000"}};
Terrasoft.storesConfig = [];
Terrasoft.storesConfig.push({levelName: 'ClientPageSession', type: 'Terrasoft.Me
moryStore', isCache: true});Terrasoft.storesConfig.push({levelName: 'Domain', ty
pe: 'Terrasoft.LocalStore', isCache: true});
if(Terrasoft.StoreManager){
        Terrasoft.StoreManager.registerStores(Terrasoft.storesConfig);
}
 
</script>
</head>
<body>
        <form name="IndexForm" method="post" action="./NuiLogin.aspx?ReturnUrl=%
2f0%2fServiceModel%2fSimpleCustomService.svc%2fsoap" id="IndexForm">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="Ael0TejuuQ2cn+6a
KrS5wJo2ATMwUDq1DBRh5WGdOqpW+NOyOwBLY85L9xsvJnX+0sZlKI3bZN5Qk7o0okrcDBSteeTArKGx
leRg/1ydqd/XMABb" />
</div>
 
<div>
 
        <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATO
R" value="F2DA7F48" />
</div>
        </form>
</body>
</html>
 
--.
   в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClien
tMessage message, WebResponse response, Stream responseStream, Boolean asyncCall
)
   в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodNa
me, Object[] parameters)
   в UsrService.SayHello() в c:\VS2015\Projects\WCFSharedDLL\WCFSharedDLL\TestPr
oxyClass.cs:строка 44
   в ConsoleApplicationForTesting.Program.Main(String[] args) в c:\VS2015\Projec
ts\ConsoleApplicationForTesting\ConsoleApplicationForTesting\Program.cs:строка 1
6
Для продолжения нажмите любую клавишу . . 

Т.е. исходный код страницы авторизации.

Решил таким образом. На уровне транспортного протокола передал учетные данные:

public const string authServiceUri = 
	"http://localhost:8080/ServiceModel/AuthService.svc/Login";
public static CookieContainer AuthCookie = 
	new CookieContainer();
 
public static bool TryLogin(string userName, string userPassword)
{
    var authRequest = HttpWebRequest.Create(authServiceUri) 
		as HttpWebRequest;
 
    authRequest.Method = "POST";
    authRequest.ContentType = "application/json";
    authRequest.CookieContainer = AuthCookie;
 
    using (var requesrStream = authRequest.GetRequestStream())
    {
        using(var writer = new StreamWriter(requesrStream))
        {
            writer.Write(@"{
                ""UserName"":""" + userName + @""",
                ""UserPassword"":""" + userPassword + @"""
            }");
        }
    }
 
    using(var response = (HttpWebResponse)authRequest.GetResponse())
    {
        if (AuthCookie.Count > 0)
        {
            return true;
        }
    }
    return false;
}

Установил CookieContainer:

client.CookieContainer = AuthCookie;

Стало возможным выполнять запросы к Web- сервису:

static void Main(string[] args)
{
	using (UsrService client = new UsrService())
	{
		if(TryLogin("Пользователь 1", "Пользователь 1"))
		{
			client.CookieContainer = AuthCookie;
			Console.WriteLine(client.SayHello());
		}
	}
}

Хотя и осталось непонятным, почему не удалось аутентифицировать внешние запросы через передачу учетных данных в SOAP заголовке...

Здравствуйте.
Как вариант, в заголовок запроса можно было попробовать указать content-type "text/xml".

Здравствуйте, Александр. Хорошо, спасибо - попробую и отпишусь, что вышло.

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

В SDK bpm'online дополнен раздел "Рекомендуемые средства интеграции".
Заходите на сайт Terrasoft Academy в раздел "Документация SDK" и узнайте как

Статьи расположены в разделе "Рекомендуемые средства интеграции".

Нравится

Поделиться

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

Добрый день!
Вопрос по статье "выполнить аутентификацию внешних запросов к веб-сервисам bpm'online". Что делать, если у пользователей ntlm-аутентификация (логин/пароль доменные) и нужно обратить к сервису OData?

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

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

Сергей, не совсем понял, при чем тут страница логина.
Есть внешний код (в примере это код на C#), там жестко зашиты логин/пароль.
Вопрос: что зашивать, если логин/пароль доменные?

NTLM - аутентификация используется только через страницу логина.
В версиях 5.4, 7.6 и выше через аутентификационный сервис можно выполнить аутентификацию по логину/паролю пользователя в системе или по LDAP.

То есть, если у меня 5 пользователей, все доменные, то я не смогу создать например лид через OData, использую какую то внешнюю систему?

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

Сергей,
я подключусь, авторизуюсь по LDAP из своего кода, а как потом обратиться к сервису (например добавить лид)? Он же попросит авторизацию логин/пароль, а я после авторизации только на уровне кода смогу проверить, что все ок, а пароль то все равно не смогу в сервис передать и он меня не пустит.

Александр, данная аутентификация не поддерживается.
Поддерживаются:
1. Basic
2. Cookie (если есть способ получить аутентификационные куки из bpm'online, выполняется с помощью auth-сервиса).

Добрый день!
Скажите, пожалуйста, правильно ли я поняла?
чтобы использовать протокол ODATA необходимо, чтобы был хотя бы один пользователь(администратор) НЕ с доменной авторизацией ?

Добрый день, Дарья!

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

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

На робочій базі застосована LDAP-автентифікація, на робочій же можна легко вибрати для користувача BPMonline-автентифікацію.

Скопіював базу для тестування, налаштував веб-сайт і тепер на цій базі при спробі встановити для конкретного користувача BPMonline-автентифікацію отримую помилку:

Exception Message: Элемент коллекции с идентификатором "{5C3C64DC-3089-42A3-8917-A0C6E9B0C198}" не найден
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core

Мені б бажано це якось полікувати, тільки ще не знаю як.

Нравится

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

Власне, неможливо змінити тип автентифікації, ні LDAP->BPMonline, ні BPMonline->LDAP

Игорь, здравствуйте!
Уточните, пожалуйста, с какой версией Вы работаете?
Спасибо.

5.4.0.2455 BPMonline Service Desk

Игорь, есть еще несколько вопросов:
1. База данных BPMonline Service Desk предоставлялась именно с этой версией приложения, если нет, тогда с какой?
2. Были ли доработки/проектное решение?
3. Можно получить от Вас более подробное описание сообщения?
Спасибо.

1. База надавалася з цією версією.
2. Доопрацювання були.
3. Файл скинув в приват

Игорь, данная ошибка связана с тем, что в поле UserMainPageEdit, карточки редактирования пользователя, установлено значение, которого нет в списке UserMainPage. Последний можно найти в списке конфигурации.
Спасибо.

Маю ще одну тестову конфігурацію, де успішно можна змінювати тип автентифікації.
Там в групі "Данные" поля [UserMainPageEdit] нічого не прописано.

Значення, про яке ви пишете, фіксується в самій формі, чи скриптом в процесі ?

Игорь,
Данное поле в карточке является обязательным для заполнения.
Наполнение справочника и проставление значения происходит в процессе карточки редактирования FillUserMainPageValues и ScriptPageLoadCompleteChild

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

Не могу авторизоваться в демо версии 7.4.0.2892_Omnichannel_DemoInternal_MSSQL_RUS ни под какими логинами(Supervisor, Demo_ru, Пользователь 1 и тд).
В консоли ошибок нет.

Нравится

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

Здравствуйте, Иван!

Насколько я понял, при попытке авторизации ничего не происходит.

Вероятнее всего, у Вас не установлен один или несколько компонентов .NET Framework, в частности, HTTP Activation пакета WCF Services:

http://www.community.terrasoft.ru/blogs/9111#comment-47423

"Безродный Андрей" написал:

Здравствуйте, Иван!

Насколько я понял, при попытке авторизации ничего не происходит.

Вероятнее всего, у Вас не установлен один или несколько компонентов .NET Framework, в частности, HTTP Activation пакета WCF Services:

http://www.community.terrasoft.ru/blogs/9111#comment-47423


IIS настроен согласно мануалам:
http://www.training.terrasoft.ru/sites/default/files/BPMonline_Setup_Gu…
http://www.community.terrasoft.ru/blogs/9111#comment-47423
В обоих случаях результат тот же.
Ниже скрины настроек IIS:

Здравствуйте, Иван!

Подробное описание необходимых параметров на web-сервере IIS описано в руководстве по установке on-site начиная со второго раздела. Руководство прикрепляю вложением. Стандартные авторизационные данные для входа в демо версию Пользователь 1/Пользователь 1.
ustanovka_on-site.doc

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