Такого способа сейчас стандартно, к сожалению, не предусмотрено. Ранее была зарегистрирована идея о добавлении новых способов авторизации, в том числе и Bearer.
По вопросу интеграции с Prom обратите внимание на дополнение, умеющее с ним работать, я писал в соседней теме.
Если так, как предложил Евгений, полноценно работает, можно использовать.
Полозюков Евгений Петрович,Спасибо, но не совсем. значение надо было указать c припиской метода авторизации, вот так - Bearer 5430b**********315955c2754
Подскажите, п можно как-то процессом обработать ответ (коллекцию). В данном запросе я получил ответ со списком продуктов, могу как-то впроцессе его или обновить или создать, если нет такого?
А какая у Вас версия системы? В 7.16.4 расширили возможности работы с коллекциями:
Добавлена возможность пользовательскими средствами создать параметр процесса типа “Коллекция записей” и настроить его структуру (создать вложенные параметры). Например, параметр “Коллекция записей” можно использовать в следующих случаях:
Если при выполнении элемента [Задание сценарий] была сформирована коллекция записей, то можно ее передать в параметр процесса и далее обработать пользовательскими средствами.
При запуске бизнес-процесса из C# или JS-кода коллекцию записей можно передать во входящий параметр и обработать в ходе процесса.
Данный параметр можно использовать, если необходимо передать коллекцию записей между процессами.
Пример настройки структуры параметра “Коллекция записей”
Больше о том, как работать с коллекциями, см. тут и тут.
Планируем использовать свой конфигурационный сервис для интеграции со сторонним приложением. Стороннее приложение всегда будет аутентифиицироваться под одним и тем же пользователем в BPMonline. В связи с этим хотелось бы оптимизировать этот процесс.
Как показывают тесты, выполнение логина каждый раз перед обращение к конфигурационному сервису сильно замедляет процесс получения полезного ответа (примерно в 2 раза), увеличивает трафик, нагрузку на сервер приложений и тд.
В связи с этим пара вопросов:
1. Как регулярно нужно аутентифицироваться в BPMonline ?
2. Можно ли перед тем как обращаться к конфигурационному сервису как-то убедиться, что аутентификация успешно выполнена и непросрочена, не посылая дополнительных запросов в BPM?
Вот такой код не работает, поскольку свойства Expires и Expired заполняются только у куки UserName и там примерно сутки время жизни, а 401 ошибку мы начинаем получать гораздо раньше
publicstaticbool CheckCookiesValid(){
var cookieContainer = LoginClass.AuthCookie;
var cookies = cookieContainer.GetCookies(new Uri(serviceUri));if(cookies.Count<4){returnfalse;}
foreach (Cookie cookie in cookies){if(cookie.Expired){returnfalse;}}returntrue;}
или же не стоит с этим всем заморачиваться и просто каждый раз перед обращением к сервису делать LoginClass.TryLogin ?
Каждый раз авторизироваться точно не стоит, это захламляет таблицу SysUserSession, которая вырастает до огромного объёма и каждая вставка в неё проходит всё тяжелее.
Пример работы с авторизацией, а затем с данными по интеграции есть в академии.
Прерывание сессии раньше срока может быть вызвано различными причинами, например, очисткой Redis на сервере. Если при попытке считать или записать данные выдало об отсутствии авторизации, проще авторизироваться раз повторно и далее работать уже с новыми куками.
Существует проблема следующего характера. На предприятии с большим количеством сотрудников для работы с CRM применяется NTLM аутентификация. Почта в CRM привязана к учетной записи в Exchange. И все вроде бы хорошо, ввел один раз пароль и работаешь.
Но! В в целях безопасности раз в 30 дней сотрудник должен менять пароль от учетной записи. Соответственно пароль от почты автоматически меняется на аналогичный пароль. Авторизация в CRM проходит успешно, но вот для синхронизации почты приходится лезть в настройки и менять пароль. Некоторым пользователям это лень делать, некоторые боятся что-нибудь испортить и т.д. Но это пол беды, из-за того что от пользователя поступает слишком много запросов на авторизацию с неверными данными он блокируется в Active Directory
Есть ли способ автоматически назначать актуальный пароль для синхронизации почты? Если да, то как это это сделать? Возможно кто-нибудь уже сталкивался с подобным.
Когда смотрю, что уже прошло больше года задаю вопрос 'когда' повторно, на что получаю ответ - 'Такое пожелание поступило только от Вас, поэтому у него низкий приоритет и мы его пока не рассматриваем на реализацию'.
Если честно, когда постоянно получаешь такие ответы, то понимаешь, что писать какие бы то ни было пожелания нет смысла.
Думаю, что многие пользователи из-за такого подхода уже 'забили' писать свои пожелания и идеи.
Хорошо, что появился маркетплейс bpm'online, и много чего полезного теперь можно найти бесплатно или за небольшие деньги.
Проговорил описанную проблему с аналитиками продукта. Синхронизация почты в bpmonline работает так, что она сохраняет учетные данные для почтового ящика в базе данных (оригинальное имя пользователя и зашифрованный пароль). Да, на текущий момент система работает так, что после смены пароля пользователя в AD/NTLM нужно менять вручную изменить пароль в bpmonline для почтовых ящиков, чтобы синхронизация почты работала дальше.
Мы зарегистрировали проблему по вашему обращению и передали на анализ команде разработки продукта.
На данный момент в коммуникационной панели отображается соответствующее сообщение если пароль невалидный (см. Рис. 1).
Писал такой же вопрос в техподдержку в сентябре 2018. получил ответ "подобная настройка в текущей версии системы не может быть выполнена по соображениям безопасности. Мы передали данное обращение в команду разработчиков и они рассмотрят возможность изменения логики работы синхронизации почты в будущих версиях."
Немного не так выразился. Имелось ввиду не исправление, а пожелание. На данный момент такой функциональности нет сейчас. Вам необходимо задавать пароль (см. скриншот выше).
Когда смотрю, что уже прошло больше года задаю вопрос 'когда' повторно, на что получаю ответ - 'Такое пожелание поступило только от Вас, поэтому у него низкий приоритет и мы его пока не рассматриваем на реализацию'.
Если честно, когда постоянно получаешь такие ответы, то понимаешь, что писать какие бы то ни было пожелания нет смысла.
Думаю, что многие пользователи из-за такого подхода уже 'забили' писать свои пожелания и идеи.
Хорошо, что появился маркетплейс bpm'online, и много чего полезного теперь можно найти бесплатно или за небольшие деньги.
Александр прав. Можно написать конфиги, прокинуть сервис без авторизации. И если сайт не в облаке, тогда всё просто, если в облаке - каждое обновление конфиги перетирает.
Либо типовая авторизация (тот же 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) выходит сообщение "Метод не разрешен".
Прикрепите пожалуйста свой проекта на 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";
}
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;
}
Здравствуйте
Ориентироваться на количество кук мягко говоря не совсем корректно
Нужно анализировать 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
{publicint 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
{privateconst string baseUri ="http://localhost/bpmonline-7.9.1";// Cookie аутентификации bpm'online.publicstatic CookieContainer AuthCookie =new CookieContainer();// Строка запроса к методу Login сервиса AuthService.svc.privateconst string authServiceUri = baseUri + @"/ServiceModel/AuthService.svc/Login";staticvoid Main(string[] args){
Console.WriteLine(TryLogin("Supervisor", "Supervisor_1"));
Console.ReadLine();}publicstaticbool 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){returntrue;}
Console.WriteLine(status.Message);}returnfalse;}}}
Исправьте условие с if (AuthCookie.Count > 0) на if (AuthCookie.Count > 1)
Ваш вариант работает. Спасибо!
Подскажите, пожалуйста, почему не работал мой исходный вариант - почему хотя бы одна кука возвращается даже при неуспешной аутентификации? Это особенность terrasoft?
Я брала пример из официальной документации на академии https://academy.terrasoft.ru/documents/technic-sdk/7-9/autentifikaciya-…
"Роман Симута" написал:Здравствуйте
Ориентироваться на количество кук мягко говоря не совсем корректно
Нужно анализировать JSON - объект, который приходит в теле ответа
А именно его свойство Code
Если Code==0, то аутентификация успешна
Иначе ошибка, текст которой можно узнать из свойства Message
В ближайшее время статью на академии исправлю
Добрый день!
Вопрос по статье "выполнить аутентификацию внешних запросов к веб-сервисам bpm'online". Что делать, если у пользователей ntlm-аутентификация (логин/пароль доменные) и нужно обратить к сервису OData?
Сергей, не совсем понял, при чем тут страница логина.
Есть внешний код (в примере это код на C#), там жестко зашиты логин/пароль.
Вопрос: что зашивать, если логин/пароль доменные?
NTLM - аутентификация используется только через страницу логина.
В версиях 5.4, 7.6 и выше через аутентификационный сервис можно выполнить аутентификацию по логину/паролю пользователя в системе или по LDAP.
Сергей,
я подключусь, авторизуюсь по LDAP из своего кода, а как потом обратиться к сервису (например добавить лид)? Он же попросит авторизацию логин/пароль, а я после авторизации только на уровне кода смогу проверить, что все ок, а пароль то все равно не смогу в сервис передать и он меня не пустит.
Александр, данная аутентификация не поддерживается.
Поддерживаются:
1. Basic
2. Cookie (если есть способ получить аутентификационные куки из bpm'online, выполняется с помощью auth-сервиса).
Добрый день!
Скажите, пожалуйста, правильно ли я поняла?
чтобы использовать протокол ODATA необходимо, чтобы был хотя бы один пользователь(администратор) НЕ с доменной авторизацией ?
На робочій базі застосована LDAP-автентифікація, на робочій же можна легко вибрати для користувача BPMonline-автентифікацію.
Скопіював базу для тестування, налаштував веб-сайт і тепер на цій базі при спробі встановити для конкретного користувача BPMonline-автентифікацію отримую помилку:
Exception Message: Элемент коллекции с идентификатором "{5C3C64DC-3089-42A3-8917-A0C6E9B0C198}" не найден
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core
Мені б бажано це якось полікувати, тільки ще не знаю як.
Игорь, есть еще несколько вопросов:
1. База данных BPMonline Service Desk предоставлялась именно с этой версией приложения, если нет, тогда с какой?
2. Были ли доработки/проектное решение?
3. Можно получить от Вас более подробное описание сообщения?
Спасибо.
Игорь, данная ошибка связана с тем, что в поле UserMainPageEdit, карточки редактирования пользователя, установлено значение, которого нет в списке UserMainPage. Последний можно найти в списке конфигурации.
Спасибо.
Игорь,
Данное поле в карточке является обязательным для заполнения.
Наполнение справочника и проставление значения происходит в процессе карточки редактирования FillUserMainPageValues и ScriptPageLoadCompleteChild
Не могу авторизоваться в демо версии 7.4.0.2892_Omnichannel_DemoInternal_MSSQL_RUS ни под какими логинами(Supervisor, Demo_ru, Пользователь 1 и тд). В консоли ошибок нет.
Подробное описание необходимых параметров на web-сервере IIS описано в руководстве по установке on-site начиная со второго раздела. Руководство прикрепляю вложением. Стандартные авторизационные данные для входа в демо версию Пользователь 1/Пользователь 1. ustanovka_on-site.doc