Passer au contenu principal

Vue d’ensemble du processus d’authentification

Le JSON Web Token (JWT) est un format d’échange de données utilisé pour transférer des données de manière sécurisée entre l’Application Server d’ABBYY FlexiCapture 12 et des services tiers. Lors d’une authentification via JWT, aucune donnée d’identification n’est envoyée à l’Application Server. L’authentification s’effectue sur un service tiers, après quoi l’Application Server est informé que l’utilisateur a été authentifié par un service de confiance.

Implémentation

Récupération des données JSON

Exemple de données 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"}
Les données JSON contenant les certificats utilisateur sont encodées en Base64 afin de créer 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;
}

Envoi d’un JWT au Application Server

Un JWT doit être envoyé au Application Server via l’URL suivante : https://<ApplicationServer>/Flexicapture12/Server/jwt. Cette opération s’effectue au moyen d’une requête POST.
Si vous utilisez un tenant, ajoutez l’identifiant du tenant à l’URL du 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() );
}
}
}
Pour que l’authentification fonctionne, un utilisateur dont l’identifiant de connexion correspond à l’identifiant figurant dans le JWT (contenu dans la valeur du nœud nameid) doit être enregistré sur l’Application Server
<?xml version="1.0" encoding="utf-8" ?>
<authTicket>
<userName>user</userName>
<ticket>79BB391216E9BBA3DA13E5F29669FF1EB48C387C8FDE41D473AA5698A2E16A8B6E91470F05F3C2FBF685630FD7683DC2FA42A900A007CFAD1AD310FEE1ADADFC</ticket>
</authTicket>
La valeur du champ ticket est le ticket d’authentification ABBYY FlexiCapture 12. Vous pouvez utiliser ce ticket pour effectuer des appels à toutes les interfaces de l’Application Server qui nécessitent une authentification. Les services doivent être accessibles via l’authentification ABBYY FlexiCapture, c’est-à-dire à l’aide d’adresses commençant par https://<ApplicationServer>/flexicapture12/Server/FCAuth/ ou https://<ApplicationServer>/flexicapture12/Server/MobileApp/.

Utilisation d’un ticket ABBYY FlexiCapture 12 authentifié

Vous pouvez transmettre au serveur un ticket ABBYY FlexiCapture 12 authentifié à l’aide d’un fichier de cookie (le fichier doit être nommé FlexiCaptureTmpPrn) ou de l’en-tête Authorization: Bearer.
Authorization: Bearer 82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57
Nous vous recommandons d’utiliser l’en-tête Authorization: Bearer (les cookies sont pris en charge uniquement pour des raisons de compatibilité descendante).

Configuration d’un certificat de confiance sur l’Application Server

L’Application Server vérifie les données reçues du fournisseur d’identité. Pour que l’Application Server puisse leur faire confiance, elles doivent être signées à l’aide d’un certificat personnalisé émis par une autorité de confiance répertoriée dans la base de données de l’Application Server. Importez le certificat dans la base de données ABBYY FlexiCapture. Les données seront alors vérifiées à l’aide de ce certificat. Pour plus d’informations, voir Configuration de l’authentification unique. Si la vérification échoue, l’Application Server s’appuiera sur le paramètre AllowMixedModeCertificateValidation des paramètres <appSettings> du fichier Web.config. Si ce paramètre est défini sur true, la vérification sera effectuée à l’aide du certificat ajouté au dossier Trusted Root Certification Authorities dans le magasin de certificats de l’ordinateur local, sur l’ordinateur qui exécute l’Application Server. Si aucun certificat n’est ajouté à la base de données, la vérification sera effectuée à l’aide du certificat situé dans le dossier Trusted Root Certification Authorities, et le paramètre AllowMixedModeCertificateValidation sera ignoré. Pour télécharger le projet et les éléments associés, utilisez ce lien : JWT_Example.zip