Защита от 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/имя_сервиса" />