Вопрос

Добрый день!

Интересует несколько вопросов, связанных с использованием web-сервисов:

1) Доступна ли  basic авторизация  для ProcessEngineService.svc а так же для кастомных конфигурационных сервисов? 

2) И если 1- да, то как правильно передать параметры авторизации?

Использую вебсервис так:

http://site/0/ServiceModel/ProcessEngineService.svc/RunProcess

{"parameterValues":
[
{"name":"Title","value":"TestValue1"},
{"name":"Description","value":"TestValue2"},
{"name":"Action","value":"TestValue3"}
],
"schemaUId":"AF7E3F40-0EFA-431A-94AA-4DEEFFE16E59",
"schemaName":"UsrCaseIntegrationProcess"}

 

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

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

С авторизацией разобрался

Появился новый вопрос - как вернуть результат выполнения процесса. Как проавильно прописать в POST запрос ResultParameterName

Бакалов Павел Вячеславович,

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

Примеры запроса есть тут: https://academy.terrasoft.ru/documents/technic-sdk/7-12/web-servis-proc…

 

Tsopa,

Да, процесс компилируемый. Руководствуясь данной инструкции удалось выполнить процесс, передать параметры и получить результат используя метод GET. Но в инструкции написано, что так же можно использовать метод POST. Но у меня не вышло это сделать - процесс выполнился, но параметры в него не попали и результат соответственно не вернулся. Нет ли примеров POST запросов к методу Execute ?

Вот с постом.

Зверев Александр,

Александр, спасибо конечно, но это метод RunProcess, который я привел в самом начале своего поста. А меня интересует вызов метода Execute, так как в нем есть возможность вернуть результат выполнения процесса в виде параметра процесса.

Бакалов Павел Вячеславович,

POST запрос к методу Execute  не рекомендуется отправлять, поскольку  операция устарела, вместо этого стоит отправлять запрос /RunProcess.

Но если необходимо отправить POST запрос к Execute это можно сделать следующим образом: 

schemaName - эта название схемы процесса, который необходимо запустить

https://[site]/0/ServiceModel/ProcessEngineService.svc/[schemaName]/Execute

пример Header: 

Content-Type: application/json
BPMCSRF: BgsjByc16fsEZfuAr/CxDO
Cookie: BPMLOADER=vuhtzmo2wh2mxgb1amggorf2; .ASPXAUTH=FFF4F....; BPMCSRF=BgsjByc16fsEZfuAr/CxDO;

пример body: 

{}

 

как Вы решили проблему Basic авторизации?

См. тут. А вообще, базовую не рекомендуют, вот её сравнение с Cookies.

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

Добрый день!

Изучаю интеграцию BpmOnline с внешними приложениями. Создал тестовый wcf сервис. Кидаю на него запросы через fiddler. Авторизация через AuthService работает корректно, запросы уходят и сервис отвечает. Однако, запросы с Basic авторизацией до сервиса не долетают, возвращается ошибка 302 Found. CSRF- шифрование в Web-конфиге отключено. Подскажите, как добиться корректного ответа от сервиса. Вот полный текст запроса и ответа:

 

POST http://localhost:89/0/ServiceModel/NewWebService.svc/auth HTTP/1.1
Content-Type: text/xml
Authorization: Basic U3VwZXJ2aXNvcjpTdXBlcnZpc29y
Host: localhost:89
Content-Length: 191
Expect: 100-continue
Connection: Keep-Alive

<?xml version="1.0"?>
<RequestData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <details>Ivan|29|3years|C#</details>
</RequestData>

 

HTTP/1.1 302 Found
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Location: /0/ServiceModel/NewWebService.svc/auth
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
Set-Cookie: BPMSESSIONID=1afcupzm3ekdmhknqytxkak4; path=/0; HttpOnly
Set-Cookie: .ASPXAUTH=; expires=Mon, 11-Oct-1999 19:00:00 GMT; path=/; HttpOnly
X-Powered-By: ASP.NET
X-Frame-Options: SAMEORIGIN
Date: Thu, 01 Feb 2018 06:27:58 GMT

9b
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/0/ServiceModel/NewWebService.svc/auth">here</a>.</h2>
</body></html>

0
 

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

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

Дмитрий, добрый день!

Мы крайне не рекомендуем использовать basic аутентификацию, так как она имеет ряд недостатков: 

- Только один уровень защиты – использование SSL/TLS;
- Учетные данные передаются на каждый запрос, что значительно расширяет временные возможности атаки;
- Нет политики устаревания аутентификационных данных, только замена на клиенте и сервере;
- Данные аутентификации должны все время хранится в памяти клиента (например, браузера), что расширяет возможности атаки;
- Она не рекомендуется для аутентификации в приложениях https://www.owasp.org/index.php/Basic_Authentication

Maksym Naumovets,

Максим, а как в таком случае внутри метода сервиса получить UserConnection?

Дмитри, вот пример создания конфигурационного сервиса с академии.

или же использовав:
 
_userConnection = HttpContext.Current.Session["UserConnection"] as UserConnection;
var appConnection = HttpContext.Current.Application["AppConnection"] as AppConnection;

предварительно подключив using Terrasoft.Core;
 

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

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

Я заметил, что к OData в BPM можно обращаться используя basic authentication в заголовке запроса. Как можно сделать тоже самое для своего веб-сервиса? Я попробовал сделать сам, получая заголовок запроса, вытаскивая от туда данные basic authentication и пытался через класс AuthService сделать авторизацию, но у меня не получилось, т.к. в методе Login происходила ошибка.

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

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

Спасибо, помощь больше не нужна, разобрался сам. Если ,вдруг, кому нужно, то авторизовать пользователя можно вызвав метод RecreateUserConnection у класса SessionHelper и передав ему логин, пароль и др. данные.

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