Документация

Документация по разработке bpm’online
Защита от CSRF атак при интеграции c bpm'online

Glossary Item Box

Общие сведения

Начиная с версии 7.10 в bpm'online реализована защита от CSRF-атак. В связи с этим необходимо внести дополнительные изменения в процесс интеграции с bpm'online c использованием DataService или OData.

При интеграции bpm'online со сторонними приложениями необходимо пройти аутентификацию с помощью сервиса AuthService.svc. После удачного прохождения аутентификации AuthService возвращает аутентификационный cookie, который необходимо добавлять к запросу, а также cookie, содержащий CSRF-токен, который необходимо поместить в заголовок запроса.

Примеры использования аутентификационного куки приведены в статье "Аутентификация внешних запросов к веб-сервисам bpm'online", а также в статьях разделов "Протокол OData" и "Веб-служба DataService".

Как правило, до реализации защиты от CSRF-атак приходилось создавать метод, который вызвался в ответ на событие экземпляра контекста SendingRequest (создание нового экземпляра HttpWebRequest), и в этом методе выполнить аутентификацию пользователя и передачу cookie. После реализации защиты от CSRF-атак в этом методе также необходимо реализовать добавление CSRF-токена в заголовок запроса:

static void OnSendingRequestCookie(object sender, SendingRequestEventArgs e)
{
    // Вызов метода класса LoginClass, реализующего аутентификацию пользователя.
    LoginClass.TryLogin("BPMUserName", "BPMUserPassword");
    var req = e.Request as HttpWebRequest;
    // Добавление аутентификационных cookie в запрос на получение данных.
    req.CookieContainer = LoginClass.AuthCookie;
    e.Request = req;
    // Добавление CSRF-токена в заголовок запроса.
    CookieCollection cookieCollection = AuthCookie.GetCookies(new Uri(authServiceUri));
    string csrfToken = cookieCollection["BPMCSRF"].Value;
    ((HttpWebRequest)e.Request).Headers.Add("BPMCSRF", csrfToken);
}

К СВЕДЕНИЮ

Пример использования метода OnSendingRequestCookie() приведен в статье "Работа с объектами bpm'online по протоколу OData через WCF-клиент".

ВАЖНО

Защита от CSRF-атак работает только при использовании Form-аутентификации.

Как отключить зачиту от CSRF-атак

Чтобы отключить защиту от CSRF-атак, необходимо в файлах .\Web.Config и .\Terrasoft.WebApp\Web.Config отключить настройку UseCsrfToken:

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

Также существует возможность указать приложению методы сервиса, при обращении к которым не будет проверяться наличие CSRF-токена. Для этого предназначена настройка DisableCsrfTokenValidationForPaths в файле .\Web.Config.

Пример отключения защиты от CSRF-атак для двух разных методов разных сервисов:

<add key="DisableCsrfTokenValidationForPaths" value="/MsgUtilService.svc/Ping,/AuthService.svc/Login" />

Пример отключения защиты от CSRF-атак для одного сервиса полностью:

<add key="DisableCsrfTokenValidationForPaths" value="/ServiceModel/имя_сервиса" />

© Terrasoft 2002-2017.

Был ли данный материал полезен?

Как можно улучшить эту статью?