Russian (Русский) - Change language

Аутентификация посредством SAML 2.0 на Cервере приложений ABBYY FlexiCapture12

Краткое описание процесса аутентификации

SAML-аутентификация позволяет пользователю комплекса не передавать свою идентификационную информацию (например, логин/пароль) на Сервер приложений FlexiCapture, а авторизоваться на стороннем сервисе (Google, Facebook, etc), и передать Серверу FlexiCapture информацию о том, что пользователь авторизован одним из сервисов, который признан надежным.

То есть последовательность действий пользовательского приложения должна быть следующей:

  •  авторизоваться на стороннем сервисе
  •  получить от него SAML-данные аутентификации пользователя
  •  передать их на Сервер приложений FlexiCapture
  •  получить в ответ от Сервера приложений аутентификационный тикет

Дальше можно отправлять запросы на Сервер приложений, используя этот тикет.

Замечание. Пользователь с данным логином должен быть заведен в базе ABBYY FlexiCapture, и ему должны быть выданы требующиеся для работы права.

Подробности реализации

Получение SAML-данных

SAML-данные должны быть получены от стороннего сервиса в следующем виде (пример данных для OneLogin для сравнения)

Подробнее о том, как получить данные аутентификации нужно смотреть в документации стороннего сервиса. Например, сервис OneLogin предлагает готовые комплекты инструментов для нескольких языков разработки https://www.onelogin.com/resources/saml-toolkits, для обращения к нему как к SAML-провайдеру.

Отправка SAML на Сервер приложений ABBYY FlexiCapture12

SAML-данные нужно упаковать в base64 и отправить на Сервер приложений, по url http://<ApplicationServer>/Flexicapture12/Server/Saml, при помощи POST-запроса, имя поля с данными SAMLResponse.

public static async Task sendSamlToServer( string samlData )
{     
    string serviceUrl = "http://<ApplicationServer>/Flexicapture12/Server/SAML";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create( serviceUrl );
    request.Method = "POST";

        var fields = new Dictionary<string, string>();
    fields.Add( "SAMLResponse", Convert.ToBase64String( Encoding.Default.GetBytes( samlData ) ) );
        HttpClient client = new HttpClient();
        FormUrlEncodedContent content = new FormUrlEncodedContent( fields );
    HttpResponseMessage response = await client.PostAsync( serviceUrl, content );
        if( response.StatusCode == HttpStatusCode.OK ) {
        processServerResponse( response.Content.ToString() );
    } else {
            processServerError( response.StatusCode, response.Content.ToString() );
    }
    }

В случае работы с тенантами – в url сервера приложений должен быть добавлен идентификатор http://<ApplicationServer>/Flexicapture12/Server/Saml?Tenant=MyTenantName

Чтобы аутентификация прошла – на сервере приложений должен быть прописан пользователь, логин которого совпадает со значением идентификатора пользователя в SAML-данных. В качестве логина пользователя используется значение поля /samlp:Response/saml:Assertion/saml:Subject/saml:NameID.

Ответ Сервера Приложений выдается в следующем виде:

Значение поля ticket – это аутентификационный тикет FC12, с ним можно обращаться ко всем интерфейсам Сервера приложений FlexiCapture12, требующим аутентификации. Обращаться к сервисам  надо через собственную аутентификацию (адреса, содержащие префикс http://<ApplicationServer>/flexicapture12/Server/FCAuth/, либо http://<ApplicationServer>/flexicapture12/Server/MobileApp/).

Как пользоваться авторизационным тикетом FC12

Тикет можно передавать на Сервер как через cookie (c именем FlexiCaptureTmpPrn), так и через Bearer-заголовок:

Authorization: Bearer 82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57
    

Рекомендуется использовать Bearer-заголовок, cookie поддерживается только для совместимости со старыми решениями.

Если аутентификация прошла успешно – то в ответе Сервера будет содержаться обновленное значение тикета. Оно содержится как в cookie с тем же именем (FlexiCaptureTmpPrn), так и в заголовке с именем AuthTicket. Следующий запрос надо отправлять с обновленным тикетом (у тикета конечное время жизни, через какое-то время срок его действия заканчивается).

Настройка доверенного сертификата на Сервере приложений

Сервер приложений проверяет данные, полученные от поставщика удостоверений. Чтобы Сервер приложений доверял этим данным, они должны быть подписаны пользовательским сертификатом, издатель которого числится доверенным в базе данных на Сервере приложений.  

Добавьте сертификат в базу данных ABBYY FlexiCapture. В таком случае проверка данных будет происходить по нему. Подробнее см. Настройка аутентификации при помощи технологии единого входа

Если проверка не будет успешной, то Сервер приложений обратится к параметру AllowMixedModeCertificateValidation в секции <appSettings>, находящейся в файле Web.config. При значении параметра true - проверка будет произведена по сертификату, добавленному в папку Trusted Root Certification Authorities в хранилище сертификатов Local Computer на машине с Сервером приложений.

Если в базу данных не добавлен ни один сертификат, то проверка будет произведена по сертификату из папки Trusted Root Certification Authorities без учета параметра AllowMixedModeCertificateValidation.

Проект и материалы для скачивания: SAML_Example.zip

12/1/2020 7:04:04 AM


Please leave your feedback about this article