> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Authentifizierung mit JSON Web Tokens

> Authentifizieren Sie Benutzer von ABBYY FlexiCapture 12 mit JSON Web Tokens: Erstellen Sie ein signiertes JWT, senden Sie es per POST an den Application Server, und verwenden Sie das zurückgegebene Ticket bei Aufrufen.

<div id="overview-of-the-authentication-process">
  ## Überblick über den Authentifizierungsprozess
</div>

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.

<div id="implementation">
  ## Implementierung
</div>

<div id="get-json-data">
  ### JSON-Daten abrufen
</div>

Beispiel für JSON-Daten:

```json theme={null}
{"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 Base64-kodiert, um ein JSON Web Token (JWT) zu erstellen.

Das folgende Beispiel erstellt ein JWT-Token:

```csharp theme={null}
using System.IdentityModel.Tokens.Jwt;
using System.Security.Cryptography.X509Certificates;
…

static string createEncryptedJwtToken(
    X509Certificate2 encryptCert,
    string issuer,
    string audience,
    string nameid,
    TimeSpan expirationTimespan )
{
    X509SigningCredentials signingCredentials = new X509SigningCredentials( 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;
}
```

<div id="send-a-jwt-to-the-application-server">
  ### Senden Sie ein JWT an den Application Server
</div>

Ein JWT muss über die folgende URL an den Application Server gesendet werden: `https://<ApplicationServer>/Flexicapture12/Server/jwt`. Dies geschieht mithilfe einer POST-Anfrage.

<Note>
  Wenn Sie einen tenant verwenden, fügen Sie den Bezeichner des tenant zur URL des Application Server hinzu: `https://<ApplicationServer>/Flexicapture12/Server/jwt?Tenant=MyTenantName`
</Note>

```csharp theme={null}
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 (enthalten im Knotenwert `nameid`).

Der Application Server gibt eine Antwort wie folgt zurück:

```xml theme={null}
<?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 verwenden, um Aufrufe an alle Schnittstellen des Application Server auszuführen, die eine Authentifizierung erfordern. Auf Services sollte über die ABBYY FlexiCapture-Authentifizierung zugegriffen werden, also über Adressen, die mit `https://<ApplicationServer>/flexicapture12/Server/FCAuth/` oder `https://<ApplicationServer>/flexicapture12/Server/MobileApp/` beginnen.

<div id="use-an-authenticated-abbyy-flexicapture-12-ticket">
  ### Verwenden Sie ein authentifiziertes ABBYY FlexiCapture 12-Ticket
</div>

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.

Zum Beispiel:

```
Authorization: Bearer 82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57
```

Wir empfehlen die Verwendung eines `Authorization: Bearer`-Headers (Cookies werden nur aus Gründen der Abwärtskompatibilität unterstützt).

<div id="set-up-a-trusted-certificate-on-the-application-server">
  ### Einrichten eines vertrauenswürdigen Zertifikats auf dem Application Server
</div>

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 [Einrichten von Single Sign-On](/de/flexi-capture/sso-settings).

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](JWT_Example.zip)
