Zum Hauptinhalt springen

Überblick über den Authentifizierungsprozess

JSON Web Token (JWT) ist ein Datenübertragungsformat, das für die sichere Übertragung von Daten zwischen dem ABBYY FlexiCapture 12 Application Server und Diensten von Drittanbietern verwendet wird. Bei der Authentifizierung über JWT werden keine Identifikationsdaten an den Application Server übermittelt. Die Authentifizierung erfolgt über einen Drittanbieterdienst, woraufhin der Application Server darüber informiert wird, dass der Benutzer von einem vertrauenswürdigen Dienst authentifiziert wurde.

Implementierung

JSON-Daten abrufen

Beispiel für JSON-Daten:
{"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-Daten mit Benutzerzertifikaten werden in Base64 codiert, um ein JSON Web Token (JWT) zu erstellen.
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;
}

Senden eines JWT an den Application Server

Ein JWT muss über die folgende URL an den Application Server gesendet werden: https://<ApplicationServer>/Flexicapture12/Server/jwt. Dies erfolgt über eine POST-Anfrage.
Wenn Sie einen Tenant verwenden, fügen Sie den Bezeichner des Tenants zur URL des Application Server hinzu: 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() );
}
}
}
Damit die Authentifizierung funktioniert, muss auf dem Application Server ein Benutzer registriert sein, dessen Login mit dem Bezeichner im JWT übereinstimmt (der im Wert des nameid-Knotens enthalten ist)
<?xml version="1.0" encoding="utf-8" ?>
<authTicket>
<userName>user</userName>
<ticket>79BB391216E9BBA3DA13E5F29669FF1EB48C387C8FDE41D473AA5698A2E16A8B6E91470F05F3C2FBF685630FD7683DC2FA42A900A007CFAD1AD310FEE1ADADFC</ticket>
</authTicket>
Der Wert im Feld ticket ist das authentifizierte ABBYY FlexiCapture 12-Ticket. Sie können dieses Ticket für Aufrufe an alle Schnittstellen des Application Server verwenden, die eine Authentifizierung erfordern. Auf Dienste sollte über die ABBYY FlexiCapture-Authentifizierung zugegriffen werden, d. h. über Adressen, die mit https://<ApplicationServer>/flexicapture12/Server/FCAuth/ oder https://<ApplicationServer>/flexicapture12/Server/MobileApp/ beginnen*.*

Verwenden eines authentifizierten ABBYY FlexiCapture 12-Tickets

Sie können ein authentifiziertes ABBYY FlexiCapture 12-Ticket mithilfe einer Cookie-Datei an den Server senden (die Datei muss FlexiCaptureTmpPrn heißen) oder über einen Authorization: Bearer-Header.
Authorization: Bearer 82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57
Wir empfehlen die Verwendung eines Authorization: Bearer-Headers (Cookies werden nur aus Gründen der Abwärtskompatibilität unterstützt).

Einrichten eines vertrauenswürdigen Zertifikats auf dem Application Server

Der Application Server überprüft die vom Identitätsanbieter empfangenen Daten. Damit der Application Server diesen Daten vertraut, sollten sie mit einem benutzerdefinierten Zertifikat signiert sein, das von einer Zertifizierungsstelle aus der Datenbank vertrauenswürdiger Zertifizierungsstellen des Application Server ausgestellt wurde. Importieren Sie das Zertifikat in die ABBYY FlexiCapture-Datenbank. Die Daten werden dann mit diesem Zertifikat überprüft. Weitere Informationen finden Sie unter Setting up Single Sign-On. Wenn die Überprüfung fehlschlägt, richtet sich der Application Server nach dem Parameter AllowMixedModeCertificateValidation in den Einstellungen <appSettings> der Datei Web.config. Wenn dieser Parameter auf true gesetzt ist, wird die Überprüfung mit dem Zertifikat durchgeführt, das sich im Ordner Trusted Root Certification Authorities im Zertifikatspeicher „Lokaler Computer“ auf dem Computer befindet, auf dem der Application Server ausgeführt wird. Wenn der Datenbank keine Zertifikate hinzugefügt wurden, wird die Überprüfung mit dem Zertifikat durchgeführt, das sich im Ordner Trusted Root Certification Authorities befindet, und der Parameter AllowMixedModeCertificateValidation wird ignoriert. Verwenden Sie zum Herunterladen des Projekts und der zugehörigen Materialien diesen Link: JWT_Example.zip