Saltar al contenido principal

Descripción general del proceso de autenticación

JSON Web Token (JWT) es un formato de transferencia de datos que se utiliza para transferir datos de forma segura entre el Application Server de ABBYY FlexiCapture 12 y servicios de terceros. Al autenticarse mediante JWT, no se envían datos de identificación al Application Server. La autenticación se realiza en un servicio de terceros, tras lo cual se informa al Application Server de que el usuario ha sido autenticado por un servicio de confianza.

Implementación

Obtención de datos en JSON

Ejemplo de datos 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"}
Los datos JSON que contienen certificados de usuario se codifican en Base64 para crear un JSON web token (JWT).
using System.IdentityModel.Tokens.Jwt;
using System.Security.Cryptography.X509Certificates;

static string createEncryptedJwtToken(
X509Certificate2 encryptCert,
string issuer,
string audience,
string nameid,
TimeSpan expirationTimespan )
{
X509Signing Credentials signingCredentials = new X509Signing Credentials( encryptCert );
JwtHeader jwtHeader = new JwtHeader( signingCredentials );
var claims = new Claim[]
{
new Claim( "nameid", nameid )
};
var now = DateTime.UtcNow;
JwtSecurityToken newToken = new JwtSecurityToken(
issuer,
audience,
claims,
now,
now.Add( expirationTimespan ),
signingCredentials
);
var token = new JwtSecurityTokenHandler().WriteToken(newToken);
return token;
}

Envío de un JWT al Application Server

Debe enviarse un JWT al Application Server mediante la siguiente URL: https://<ApplicationServer>/Flexicapture12/Server/jwt. Esto se hace mediante una solicitud POST.
Si usa un tenant, agregue el identificador del tenant a la URL del Application Server: https://<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() );
}
}
}
Para que la autenticación funcione, debe haber un usuario registrado en el Application Server cuyo inicio de sesión coincida con el identificador del JWT (incluido en el valor del nodo nameid)
<?xml version="1.0" encoding="utf-8" ?>
<authTicket>
<userName>user</userName>
<ticket>79BB391216E9BBA3DA13E5F29669FF1EB48C387C8FDE41D473AA5698A2E16A8B6E91470F05F3C2FBF685630FD7683DC2FA42A900A007CFAD1AD310FEE1ADADFC</ticket>
</authTicket>
El valor del campo ticket es el ticket de autenticación de ABBYY FlexiCapture 12. Puede usar este ticket para realizar llamadas a todas las interfaces del Application Server que requieran autenticación. Debe accederse a los servicios mediante la autenticación de ABBYY FlexiCapture, es decir, mediante direcciones que comiencen por https://<ApplicationServer>/flexicapture12/Server/FCAuth/ o https://<ApplicationServer>/flexicapture12/Server/MobileApp/.

Uso de un ticket autenticado de ABBYY FlexiCapture 12

Puede enviar al servidor un ticket autenticado de ABBYY FlexiCapture 12 mediante un archivo de cookies (el archivo debe llamarse FlexiCaptureTmpPrn) o con el encabezado Authorization: Bearer.
Authorization: Bearer 82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57
Recomendamos usar el encabezado Authorization: Bearer (las cookies solo se admiten por compatibilidad con versiones anteriores).

Configuración de un certificado de confianza en el Application Server

El Application Server comprobará los datos recibidos del proveedor de identidad. Para que el Application Server confíe en estos datos, deben estar firmados con un certificado personalizado emitido por una autoridad incluida en la base de datos de autoridades de confianza del Application Server. Importe el certificado en la base de datos de ABBYY FlexiCapture. A partir de ese momento, los datos se comprobarán con este certificado. Para obtener más información, consulte Configuración del inicio de sesión único. Si la comprobación falla, el Application Server se basará en el parámetro AllowMixedModeCertificateValidation de la configuración de <appSettings> del archivo Web.config. Si este parámetro está establecido en true, la comprobación se realizará con el certificado agregado a la carpeta Trusted Root Certification Authorities del almacén de certificados del equipo local en el servidor donde se ejecuta el Application Server. Si no se agrega ningún certificado a la base de datos, la comprobación se realizará con el certificado ubicado en la carpeta Trusted Root Certification Authorities, y el parámetro AllowMixedModeCertificateValidation se ignorará. Para descargar el proyecto y los materiales complementarios, use este enlace: JWT_Example.zip