Защита от CSRF-атак при интеграции c Creatio
Glossary Item Box
Общие сведения
Начиная с версии 7.10 в приложении реализована защита от CSRF-атак. В связи с этим необходимо внести дополнительные изменения в процесс интеграции с Creatio c использованием DataService или OData.
При интеграции Creatio со сторонними приложениями необходимо пройти аутентификацию с помощью сервиса AuthService.svc. После удачного прохождения аутентификации AuthService возвращает аутентификационный cookie, который необходимо добавлять к запросу, а также cookie, содержащий CSRF-токен, который необходимо поместить в заголовок запроса.
Примеры использования аутентификационного куки приведены в статье "Аутентификация внешних запросов к веб-сервисам Creatio", а также в статьях разделов "Интеграция по протоколу OData" и "Веб-служба DataService".
Как правило, до реализации защиты от CSRF-атак приходилось создавать метод, который вызвался в ответ на событие экземпляра контекста SendingRequest (создание нового экземпляра HttpWebRequest), и в этом методе выполнить аутентификацию пользователя и передачу cookie. После реализации защиты от CSRF-атак в этом методе также необходимо реализовать добавление CSRF-токена в заголовок запроса:
static void OnSendingRequestCookie(object sender, SendingRequestEventArgs e) { // Вызов метода класса LoginClass, реализующего аутентификацию пользователя. LoginClass.TryLogin("CreatioUserName", "CreatioUserPassword"); 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() приведен в статье "Работа с объектами Creatio по протоколу 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/имя_сервиса" />