Документация по разработке bpm’online
PDF
Сервис аутентификации AuthService.svc

Glossary Item Box

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

Для прохождения аутентификации необходимо вызвать метод Login() сервиса AuthService.svc. При этом строка запроса к сервису выглядит следующим образом:

http(s)://[Адрес приложения bpm'online]/ServiceModel/AuthService.svc/Login

Например:

https://mycompany.bpmonline.com/ServiceModel/AuthService.svc/Login

Параметры запроса к сервису:

  • Метод: POST
  • ContentType: application/json

В теле запроса должны передаваться учетные данные пользователя bpm'online. Учетные данные передаются в формате JSON-объекта со следующими свойствами:

  • UserName: Имя пользователя bpm'online
  • UserPassword: Пароль пользователя bpm'online

В заголовках ответа на POST-запрос будут содержаться аутентификационные cookies, которые необходимо сохранить на стороне клиента или клиентском компьютере и в дальнейшем использовать в запросах к веб-сервисам bpm'online.

Также в теле ответа будет содержаться JSON-объект состояния аутентификации. Основные свойства возвращаемого JSON-объекта приведены в таблице 1.

Табл. 1. — Основные свойства JSON-объекта состояния аутентификации

Свойство Описание
Code Код состояния аутентификации. Если содержит значение 0, то аутентификация успешна. Иначе — неудачная.
Message Сообщение о причине неудачной аутентификации.
Exception Объект, содержащий детальное описание исключения, связанного с неудачной аутентификацией.

Пример вызова AuthService.svc из клиентского приложения

В примере приведена реализация консольного приложения на языке C#, которое выполняет запрос к AuthService.svc для аутентификации пользователя. Учетные данные пользователя передаются в метод TryLogin() в качестве входящих параметров userName и userPassword. При успешной аутентификации метод возвращает true, иначе — false. Также в случае неудачной аутентификации в консоль приложения выводится сообщение о причине ошибки.

Для реализации примера необходимо в Visual Studio создать обычное консольное приложение C#, назвав его, например, RequestAuthentification. В зависимости (References) проекта Visual Studio необходимо добавить системную библиотеку System.Web.Extensions.dll (рис. 1). Эта библиотека нужна для преобразования JSON-объекта состояния аутентификации из строки в объект C# — десериализации.

Рис. 1. — Зависимости проекта Visual Studio

В файл Program.cs созданного приложения нужно добавить следующий программный код:

using System;
using System.IO;
using System.Net;

namespace RequestAuthentification
{
    // Вспомогательный класс для десериализации JSON-объекта из HTTP-ответа.
    class ResponseStatus
    {
        public int Code { get; set; }
        public string Message { get; set; }
        public object Exception { get; set; }
        public object PasswordChangeUrl { get; set; }
        public object RedirectUrl { get; set; }
    }

    // Основной класс программы.
    class Program
    {
        // HTTP-адрес приложения.
        private const string baseUri = "http://mybpmonlineapp.com";
        // Контейнер для Cookie аутентификации bpm'online. Необходимо использовать в последующих запросах.
        // Это самый важный результирующий объект, для формирования свойств которого разработана
        // вся остальная функциональность примера.
        public static CookieContainer AuthCookie = new CookieContainer();
        // Строка запроса к методу Login сервиса AuthService.svc.
        private const string authServiceUri = baseUri + @"/ServiceModel/AuthService.svc/Login";

        // Выполняет запрос на аутентификацию пользователя.
        public static bool TryLogin(string userName, string userPassword)
        {
            // Создание экземпляра запроса к сервису аутентификации.
            var authRequest = HttpWebRequest.Create(authServiceUri) as HttpWebRequest;
            // Определение метода запроса.
            authRequest.Method = "POST";
            // Определение типа контента запроса.
            authRequest.ContentType = "application/json";
            // Включение использования cookie в запросе.
            authRequest.CookieContainer = AuthCookie;

            // Помещение в тело запроса учетной информации пользователя.
            using (var requestStream = authRequest.GetRequestStream())
            {
                using (var writer = new StreamWriter(requestStream))
                {
                    writer.Write(@"{
                    ""UserName"":""" + userName + @""",
                    ""UserPassword"":""" + userPassword + @"""
                    }");
                }
            }

            // Вспомогательный объект, в который будут десериализованы данные HTTP-ответа.
            ResponseStatus status = null;
            // Получение ответа от сервера. Если аутентификация проходит успешно, в свойство AuthCookie будут
            // помещены cookie, которые могут быть использованы для последующих запросов.
            using (var response = (HttpWebResponse)authRequest.GetResponse())
            {
                using (var reader = new StreamReader(response.GetResponseStream()))
                {
                    // Десериализация HTTP-ответа во вспомогательный объект.
                    string responseText = reader.ReadToEnd();
                    status = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<ResponseStatus>(responseText);
                }

            }
            
            // Проверка статуса аутентификации.
            if (status != null)
            {
                // Успешная аутентификация.
                if (status.Code == 0)
                {
                    return true;
                }
                // Сообщение о неудачной аутентификации.
                Console.WriteLine(status.Message);
            }
            return false;
        }

        // Метод входа в приложение.
        static void Main(string[] args)
        {
            // Вызов метода аутентификации.
            Console.WriteLine("Успешна ли аутентификация?: {0}", TryLogin("Пользователь 1", "Пользователь 1"));
            Console.WriteLine("Для выхода нажмите ENTER...");
            Console.ReadLine();
        }
    }
}

После запуска программы на выполнение, если при вызове метода TryLogin() были введены правильные данные пользователя, то аутентификация пройдет успешно (рис. 2). Если же данные пользователя неверны, то отобразится сообщение об ошибке и причинах неудачной аутентификации (рис. 2).

Рис. 2. — Результат успешной аутентификации

Рис. 3. — Результат неудачной аутентификации

 

 

 

© Terrasoft 2002-2019.

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

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