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

Аутентификация посредством JSON Web Tokens (JWT) на Cервере приложений ABBYY FlexiCapture12

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

Веб-токен JSON (или JWT) – формат передачи данных, который используется для безопасной передачи информации между Сервером Приложений FlexiCapture и сторонним сервисом. Аутентификация посредством JWT позволяет пользователю комплекса не передавать свою идентификационную информацию на Сервер Приложений FlexiCapture. Аутентификация происходит на стороннем сервисе, после чего Сервер FlexiCapture получает информацию о том, что пользователь аутентифицирован сервисом, признанным надежным.

 

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

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

Пример JSON-данных:

{"alg":"RS256","kid":"-JLCtyyTyF69AZrtjpk-xGs-nUE","x5t":"-JLCtyyTyF69AZrtjpk-xGs-nUE","typ":"JWT"}. 
          {"nameid":"user","nbf":1572267172,"exp":1572267772,"iss":"ABBYY","aud":"test JWT app"}
        

Эти JSON-данные с пользовательским сертификатом шифруются в BASE64 для формирования веб-токена JSON (JWT).

Пример запроса для формирования токена JWT:

 

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

JWT нужно отправить на Сервер приложений по url http://<ApplicationServer>/Flexicapture12/Server/jwt при помощи POST-запроса.

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

static async Task<string> AuthenticateByJwtAsync( string jwtToken ) 
                  { 
                      var fields = new Dictionary<string, string> 
                      { 
                          { "JwtToken", jwtToken } 
                      }; 
                      FormUrlEncodedContent content = new FormUrlEncodedContent( fields ); 
          
                     using ( var client = new HttpClient() ) 
                      { 
                          HttpResponseMessage response = await client.PostAsync( jwtServiceUrl, content ); 
                          if ( response.StatusCode == HttpStatusCode.OK ) 
                          { 
                              return response.Headers.GetValues( "AuthTicket" )?.First() ?? throw new Exception( "AuthTicket header not found" ); 
                          } 
                          else 
                          { 
                              throw new Exception( await response.Content.ReadAsStringAsync() ); 
                          } 
                      } 
                  }
       

     

Чтобы аутентификация прошла, на сервере приложений должен быть прописан пользователь, логин которого совпадает со значением идентификатора пользователя в JSON-данных: значение узла nameid.

 

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

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

 

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

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

Пример:

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

 

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

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

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

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

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

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

1/14/2021 2:17:24 PM


Please leave your feedback about this article