Аутентификация

Средний

Аутентификация — проверка подлинности идентификатора, который указан пользователем. Положительный результат аутентификации — авторизация пользователя, то есть предоставление пользователю прав доступа к ресурсам, которые доступны для выполнения его задач.

Важно. Ограничьте права пользователя на объекты, записи и колонки, которые необходимы для работы соответствующей интеграции. Предоставление пользователю дополнительных прав угрожает безопасности приложения.

Подробнее об аутентификации читайте в Википедии.

Все внешние запросы к веб-сервисам Creatio необходимо аутентифицировать.

Виды аутентификации 

Виды аутентификации, которые поддерживаются в Creatio:

Для интеграции с Creatio мы рекомендуем использовать Forms-аутентификацию, которая реализована с помощью веб-сервиса AuthService.svc. Cookie, полученные в ответ от веб-сервиса AuthService.svc, необходимо использовать в следующих запросах к Creatio.

Примеры использования аутентификационного cookie описаны в статьях OData и DataService.

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

CSRF (Сross Site Request Forgery, межсайтовая подделка запроса) — вид атак на посетителей веб-сайтов. CSRF-атаки используют недостатки протокола HTTP. По умолчанию защита включена, но вы можете ее отключить.

Важно. Мы рекомендуем отключать защиту от CSRF-атак только при использовании basic-аутентификации.

Виды сервисов, для которых вы можете отключить защиту от CSRF-атак:

  • Все сервисы приложения.
  • Один сервис приложения.
  • Несколько методов разных сервисов приложения.

Отключить защиту от CSRF-атак для всех сервисов 

  1. Откройте файл Web.Config, который находится в корневом каталоге приложения.
  2. Установите значение false для настройки UseCsrfToken.

    Файл Web.Config
    <add value="false" key="UseCsrfToken" />
    
  3. Выполните аналогичные настройки в файле ...\Terrasoft.WebApp\Web.Config.

Отключить защиту от CSRF-атак для одного сервиса 

  1. Откройте файл Web.Config, который находится в корневом каталоге приложения.
  2. Задайте имя сервиса в настройке DisableCsrfTokenValidationForPaths.

    Файл Web.Config
    <add key="DisableCsrfTokenValidationForPaths" value="/ServiceModel/ MsgUtilService.svc" />
    

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

  1. Откройте файл Web.Config, который находится в корневом каталоге приложения.
  2. Перечислите имена методов в настройке DisableCsrfTokenValidationForPaths.

    Файл Web.Config
    <add key="DisableCsrfTokenValidationForPaths" value="/MsgUtilService.svc/Ping,/AuthService.svc/Login" />
    
Реализовать аутентификацию на C#
Средний

Пример. Реализовать аутентификацию на С#.

Реализовать аутентификацию 

  1. Создайте обычное консольное приложение C#, назвав его, например, RequestAuthentification.
  2. Реализуйте аутентификацию.
    Пример программной реализации аутентификации
    // Отправляет запрос сервису аутентификации и обрабатывает ответ.
    public void TryLogin() {
        var authData = @"{
            ""UserName"":""" + _userName + @""",
            ""UserPassword"":""" + _userPassword + @"""
        }";
        var request = CreateRequest(_authServiceUrl, authData);
        _authCookie = new CookieContainer();
        request.CookieContainer = _authCookie;
        // При успешной аутентификации сохраняем аутентификационные куки для
        // дальнейшего использования в запросах к Creatio. В случае неудачной 
        // аутентификации в консоль приложения выводится сообщение о причине
        // ошибки.
        using (var response = (HttpWebResponse)request.GetResponse())
        {
            if (response.StatusCode == HttpStatusCode.OK)
            {
                using (var reader = new StreamReader(response.GetResponseStream()))
                {
                    var responseMessage = reader.ReadToEnd();
                    Console.WriteLine(responseMessage);
                    if (responseMessage.Contains("\"Code\":1"))
                    {
                        throw new UnauthorizedAccessException($"Unauthorized {_userName} for {_appUrl}");
                    }
                }
                string authName = ".ASPXAUTH";
                string authCookeValue = response.Cookies[authName].Value;
                _authCookie.Add(new Uri(_appUrl), new Cookie(authName, authCookeValue));
            }
        }
    }
    // Создает запрос к сервису аутентификации.
    private HttpWebRequest CreateRequest(string url, string requestData = null)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.ContentType = "application/json";
                request.Method = "POST";
                request.KeepAlive = true;
                if (!string.IsNullOrEmpty(requestData))
                {
                    using (var requestStream = request.GetRequestStream())
                    {
                        using (var writer = new StreamWriter(requestStream))
                        {
                            writer.Write(requestData);
                        }
                    }
                }
                return request;
            }
    // Метод реализует защиту от CSRF-атак: копирует cookie, содержащий CSRF-токен, 
    // и помещает его в заголовок следующего запроса.
    private void AddCsrfToken(HttpWebRequest request) {
        var cookie = request.CookieContainer.GetCookies(new Uri(_appUrl))["BPMCSRF"];
        if (cookie != null) {
            request.Headers.Add("BPMCSRF", cookie.Value);
        }
    }
    
Веб-сервис AuthService.svc
Средний
// Строка запроса.
POST Creatio_application_address/ServiceModel/AuthService.svc/Login

// Заголовки запроса.
Accept: application/json
ForceUseSession: true

// Тело запроса.
{    
    "UserName":"Name of user",
    "UserPassword":"Password of user"
}
// Код состояния.
Status: code

// Заголовки ответа.
Set-Cookie: BPMLOADER=cookie_value; path=/Creatio_application_address; HttpOnly
Set-Cookie:  .ASPXAUTH=cookie_value; path=/Creatio_application_address; HttpOnly
Set-Cookie: BPMCSRF=cookie_value; path=/
Set-Cookie: UserName=cookie_value; expires=date_expire_to; path=/; HttpOnly

// Тело ответа.
{
    "Code": 0,
    "Message": "",
    "Exception": null,
    "PasswordChangeUrl": null,
    "RedirectUrl": null
}

Строка запроса 

POST required

Метод запроса на аутентификацию. Неизменяемая часть запроса.

Creatio_application_address required

Адрес приложения Creatio.

ServiceModel/AuthService.svc/Login required

Метод веб-сервиса аутентификации, который необходимо вызвать для выполнения аутентификации. Неизменяемая часть запроса.

Заголовки запроса 

Content-Type application/json required

Кодировка и тип ресурса, который передается в теле запроса.

ForceUseSession true required

Заголовок ForceUseSession отвечает за принудительное использование уже существующей сессии.

Тело запроса 

UserName string required

Имя пользователя Creatio.

UserPassword  string required

Пароль пользователя Creatio.

Код состояния ответа 

code

Код состояния ответа на запрос.

Возможные коды состояния
200 OK Запрос успешно завершен и значение ресурса не равно нулю. В этом случае тело ответа должно содержать код состояния аутентификации. Если содержит значение 0, то аутентификация успешна. В случае неудачной аутентификации код состояния будет равен 1 и тело запроса будет содержать сообщение о причине неудачной аутентификации.
403 Forbidden Сервер не может предоставить доступ к ресурсу, указанному в запросе (например, в случае ошибки в имени метода). Дополнительная информация может содержаться в теле ответа.

Заголовки ответа

Ответ на POST запрос содержит аутентификационные cookie, которые необходимо сохранить на стороне клиента или на клиентском компьютере, чтобы использовать их в дальнейших запросах веб-службы Creatio.

Тело ответа 

Code

Код состояния аутентификации. Если содержит значение 0, то аутентификация успешна. Иначе — неуcпешна.

Message

Сообщение о причине неуспешной аутентификации.

Exception

Объект, содержащий детальное описание исключения, связанного с неуспешной аутентификацией.