> ## 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 über SAML-Identitätsanbieter in ABBYY FlexiCapture 12

> Authentifizieren Sie Benutzer von ABBYY FlexiCapture 12 über einen SAML-Identitätsanbieter: Rufen Sie SAML-Daten ab, senden Sie sie Base64-kodiert per POST an den Application Server und verwenden Sie das Ticket.

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

Die SAML-Authentifizierung ermöglicht es ABBYY-FlexiCapture-12-Benutzern, keine Identitätsdaten (wie Benutzername und Kennwort) an die FlexiCapture-Komponente Application Server senden zu müssen. Stattdessen authentifizieren sie sich bei einem externen Identitätsanbieter (z. B. Google oder Facebook) und übermitteln anschließend Informationen über die erfolgreiche Authentifizierung durch einen vertrauenswürdigen Drittanbieter an den Application Server.

Der SAML-Authentifizierungsprozess in einer Benutzeranwendung umfasst die folgenden Schritte:

* Sich beim externen Identitätsanbieter authentifizieren
* Die SAML-Authentifizierungsdaten des Benutzers vom externen Identitätsanbieter abrufen
* Die SAML-Authentifizierungsdaten an den Application Server senden
* Ein authentifiziertes Ticket vom Application Server erhalten

Dieses Ticket kann dann bei Anfragen an den Application Server verwendet werden.

<Note>
  Das Benutzerkonto muss in der FlexiCapture-Datenbank vorhanden sein und über alle erforderlichen Berechtigungen verfügen.
</Note>

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

<div id="get-saml-data">
  ### SAML-Daten abrufen
</div>

Die SAML-Daten eines externen Identitätsanbieters sind wie folgt formatiert (dieses Beispiel stammt von OneLogin):

```xml theme={null}
<?xml version="1.0" encoding="UTF-8" ?>
   <samlp:Response xmlns:saml = "urn:oasis:names:tc:SAML:2.0:assertion"
   xmlns:samlp = "urn:oasis:names:tc:SAML:2.0:protocol" ID = "R85bc5e644b6749bf20939c99cacf35945d74bf48" Version = "2.0"
   IssueInstant = "2016-09-15T09:56:20Z" Destination = "{recipient}" InResponseTo = "_1ba6250c-3c4e-49e1-9bff-fc82bc266b34">
      <saml:Issuer>https://app.onelogin.com/saml/metadata/585198</saml:Issuer>
      <samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status>
      <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
         xmlns:xs="https://www.w3.org/2001/XMLSchema"
         xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Version="2.0" ID="pfx5b0edaf1-7296-f635-b387-a964c92e4d5f" IssueInstant="2016-09-15T09:56:20Z">
         <saml:Issuer>https://app.onelogin.com/saml/metadata/585198</saml:Issuer>
         <ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
            <ds:SignedInfo>
               <ds:CanonicalizationMethod Algorithm="https://www.w3.org/2001/10/xml-exc-c14n#"/>
               <ds:SignatureMethod Algorithm="https://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
               <ds:Reference URI="#pfx5b0edaf1-7296-f635-b387-a964c92e4d5f">
                  <ds:Transforms>
                     <ds:Transform Algorithm="https://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                     <ds:Transform Algorithm="https://www.w3.org/2001/10/xml-exc-c14n#"/>
                  </ds:Transforms>
                  <ds:DigestMethod Algorithm="https://www.w3.org/2000/09/xmldsig#sha1"/>
                  <ds:DigestValue>udRgHOqBktJRsEzF5xkmJMOuwIk=</ds:DigestValue>
               </ds:Reference>
            </ds:SignedInfo>
            <ds:SignatureValue>LfHQBqg+S72CtSefOA8KMNxTUpOJcFCdemZ2BlCU/FR1n6pnLqZT6+m90729ciy7CNzT/w40GCcuVDggcgDKFqDb47Wzc6vs7ejC8W9OAdbJKXBK5jwYeYcJO4utN15k4e18Bv8zv96Bx/C8mBxcflSSP5C/tDAtbzvPBsyd25qADNTsKxwppZxAh4frdmSFQ4rYCOO1PnBFrS3zzguGXB9ZM0V9AAPYEJ5nU046NIVt3FTwZFoycZW2PxG+/o/JSXWS6loPnQZkWkTwrIuAcRh1dPlOSDvllGELD4Z7BN4wEVXOFBJtaU+ILlBgncNwQvFIGLF5a6YhG0hGYLaPsA==</ds:SignatureValue>
            <ds:KeyInfo>
               <ds:X509Data>
                  <ds:X509Certificate>MIIEDjCCAvagAwIBAgIUQWL60N8pdoL8VJeC0v2eJV6OL4AwDQYJKoZIhvcNAQEFBQAwVTELMAkGA1UEBhMCVVMxDjAMBgNVBAoMBUFCQllZMRUwEwYDVQQLDAxPbmVMb2dpbiBJZFAxHzAdBgNVBAMMFk9uZUxvZ2luIEFjY291bnQgOTE1MTcwHhcNMTYwOTA4MDkyNzA3WhcNMjEwOTA5MDkyNzA3WjBVMQswCQYDVQQGEwJVUzEOMAwGA1UECgwFQUJCWVkxFTATBgNVBAsMDE9uZUxvZ2luIElkUDEfMB0GA1UEAwwWT25lTG9naW4gQWNjb3VudCA5MTUxNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3vEVaTlbLjzwJPDpGCKC4TnCbnYMsxwInvKABFF4S21PYHG6M47zkO1MylP89BUXySk8TdeHb1Sd3upSoqGaM3uGd+/kv7KW71QQQG9AtczWom8VfPxju9L9t1bSsMVYjXGROv40H1Q99dGsFraiSvKAKUj5ABY6WdVNaKAU50y7XzbnwCGm65ErLwH4hW+t0wJew/hOWSb9grtKkBWNJN3BUGBOVG9YJD5U4OYGJJaeha/dvh+LpaKG2wT2EZUo/o6789bovh4VaTRqeuVruIyafxzljpOuyHSHu0JarsFqYR45NoMqMEJIbYcA62IeenAANpqwAWIb8+LPGr7YcCAwEAAaOB1TCB0jAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBS+6YWUYqLJeYXS8djijIaLxZlL+TCBkgYDVR0jBIGKMIGHgBS+6YWUYqLJeYXS8djijIaLxZlL+aFZpFcwVTELMAkGA1UEBhMCVVMxDjAMBgNVBAoMBUFCQllZMRUwEwYDVQQLDAxPbmVMb2dpbiBJZFAxHzAdBgNVBAMMFk9uZUxvZ2luIEFjY291bnQgOTE1MTeCFEFi+tDfKXaC/FSXgtL9niVeji+AMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQUFAAOCAQEAbSP3ubKUVG/Jg6jOGKQ46Rr6nSgP7Sf9zWF6a08eBHXbt3YalPR/ORp9aE+hL82S8QybNxM9fLUcEpRYzZRKysMr1rJ9slCulydCNNlopQN5j+Htfd1tbqINQNNgnnRJnwIHyitREufHQ3Zb9OWWktmyfKjHbtQe+lthCxaIfac6gcPqTIZKgLiTVdnkw/15LvBNkOnjdh6cK1cZF5MF6WdxozgQwvlVQlvh7Bm5UYZ9yQfvtUmOCq+o51cF/gm+VCKCdkeavXL9YZmh6Jk5AcVaF2od29b5rtJSlDbWUnVBFHppVJ2iaWXDHcU0Ms6+hp/LpQG18o4iO9oYw25fXA==</ds:X509Certificate>
               </ds:X509Data>
            </ds:KeyInfo>
         </ds:Signature>
         <saml:Subject>
            <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">maksim_p@abbyy.com</saml:NameID>
            <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
               <saml:SubjectConfirmationData NotOnOrAfter="2016-09-15T09:59:20Z" Recipient="{recipient}" InResponseTo="_1ba6250c-3c4e-49e1-9bff-fc82bc266b34"/>
            </saml:SubjectConfirmation>
         </saml:Subject>
         <saml:Conditions NotBefore="2016-09-15T09:53:20Z" NotOnOrAfter="2016-09-15T09:59:20Z">
            <saml:AudienceRestriction>
               <saml:Audience>{audience}</saml:Audience>
            </saml:AudienceRestriction>
         </saml:Conditions>
         <saml:AuthnStatement AuthnInstant="2016-09-15T09:56:19Z" SessionNotOnOrAfter="2016-09-16T09:56:20Z" SessionIndex="_e5832a70-5d47-0134-7b4f-026cc9f4032d">
            <saml:AuthnContext>
               <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
            </saml:AuthnContext>
         </saml:AuthnStatement>
      </saml:Assertion>
   </samlp:Response>
```

Einzelheiten dazu, wie Sie Authentifizierungsdaten von einem externen Identitätsanbieter erhalten, finden Sie in der Dokumentation des Identitätsanbieters. OneLogin bietet beispielsweise [vorgefertigte Toolkits](https://www.onelogin.com/resources/saml-toolkits) zur Aktivierung der SAML-Authentifizierung in mehreren Programmiersprachen an.

<div id="send-saml-data-to-flexicapture-12-application-server">
  ### Senden Sie SAML-Daten an den FlexiCapture 12 Application Server
</div>

Kodieren Sie die SAML-Daten in Base64 und senden Sie sie durch Senden einer POST-Anfrage an `https://<Application Server>/Flexicapture12/Server/Saml` an den Application Server. Der Name des Feldes, das die SAML-Daten enthält, sollte `SAMLResponse` sein.

```csharp theme={null}
public static async Task sendSamlToServer( string samlData )
{
    string serviceUrl = "https://<ApplicationServer>/Flexicapture12/Server/SAML";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create( serviceUrl );
    request.Method = "POST";

    var fields = new Dictionary<string, string>();
    fields.Add( "SAMLResponse", Convert.ToBase64String( Encoding.UTF8.GetBytes( samlData ) ) );
    HttpClient client = new HttpClient();
    FormUrlEncodedContent content = new FormUrlEncodedContent( fields );
    HttpResponseMessage response = await client.PostAsync( serviceUrl, content );
    if( response.StatusCode == HttpStatusCode.OK ) {
        processServerResponse( response.Content.ToString() );
    } else {
        processServerError( response.StatusCode, response.Content.ToString() );
    }
}
```

Wenn Sie einen Mandanten verwenden, fügen Sie den Bezeichner des Mandanten der Server-URL hinzu, zum Beispiel `https://<ApplicationServer>/Flexicapture12/Server/Saml?Tenant=MyTenantName`

Damit die Authentifizierung funktioniert, muss auf dem Application Server ein Benutzer registriert sein, dessen Login mit dem Bezeichner in den SAML-Daten übereinstimmt. Der Wert des Felds `/samlp:Response/saml:Assertion/saml:Subject/saml:NameID` wird als Login verwendet.

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

```xml theme={null}
<authTicket>
<userName>maksim_p@abbyy.com</userName> 
       <ticket>82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57</ticket> 
</authTicket>
```

Der Wert im Tag `<ticket>` ist das authentifizierte Ticket für FlexiCapture 12. Sie können dieses Ticket für Aufrufe an alle Schnittstellen des Application Server verwenden, die eine Authentifizierung erfordern. Anfragen an FlexiCapture-Webservices müssen über die FlexiCapture-Authentifizierung erfolgen (Adressen, die mit `https://<ApplicationServer>/flexicapture12/Server/FCAuth/` oder `https://<ApplicationServer>/flexicapture12/Server/MobileApp/` beginnen).

<div id="use-the-authenticated-fc-12-ticket">
  ### Verwenden Sie das authentifizierte FC 12-Ticket
</div>

Sie können das Ticket mithilfe einer Cookie-Datei (die Datei muss `FlexiCaptureTmpPrn` heißen) oder eines `Authorization: Bearer`-Headers an den Server übergeben. Beispiel:

```
Authorization: Bearer 82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57
```

Wir empfehlen, den Header zu verwenden. Cookies werden aus Kompatibilitätsgründen mit älteren Lösungen unterstützt.

Wenn die Authentifizierung erfolgreich ist, enthält die Antwort des Servers einen aktualisierten Ticket-Wert sowohl in einer Cookie-Datei mit demselben Login (`FlexiCaptureTmpPrn`) als auch im `AuthTicket`-Header. Die nächste Anfrage muss mit dem aktualisierten Ticket erfolgen (Tickets laufen nach einer bestimmten Zeit ab).

<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 mithilfe dieses Zertifikats ü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 `AllowMixedModeCertificateValidation`-Parameter in den `<appSettings>`-Einstellungen der Datei `Web.config`. Wenn dieser Parameter auf `true` gesetzt ist, wird die Überprüfung mithilfe des Zertifikats durchgeführt, das sich auf dem Computer, auf dem der Application Server ausgeführt wird, im Zertifikatspeicher „Lokaler Computer“ im Ordner **Trusted Root Certification Authorities** befindet.

Wenn der Datenbank keine Zertifikate hinzugefügt wurden, wird die Überprüfung mithilfe des Zertifikats im Ordner **Trusted Root Certification Authorities** durchgeführt, und der `AllowMixedModeCertificateValidation`-Parameter wird ignoriert.

**Laden Sie das Projekt und die zugehörigen Materialien herunter:** [SAML\_Example.zip](SAML_Example.zip)
