> ## 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.

# Authentification à l’aide de fournisseurs d’identité SAML dans ABBYY FlexiCapture 12

> Authentifier les utilisateurs d’ABBYY FlexiCapture 12 via un fournisseur d’identité SAML : récupérer les données SAML, les envoyer au serveur d’applications encodées en Base64 via POST, puis utiliser le ticket.

<div id="overview-of-the-authentication-process">
  ## Vue d’ensemble du processus d’authentification
</div>

L’authentification SAML permet aux utilisateurs d’ABBYY FlexiCapture 12 d’éviter d’envoyer des données d’identité (telles qu’un nom d’utilisateur et un mot de passe) au composant serveur d’applications de FlexiCapture en s’authentifiant auprès d’un fournisseur d’identité tiers (par exemple, Google ou Facebook), puis en transmettant au serveur d’applications les données confirmant le succès de l’authentification par ce tiers de confiance.

Le processus d’authentification SAML dans une application utilisateur comprend les étapes suivantes :

* S’authentifier auprès du fournisseur d’identité tiers
* Récupérer les données d’authentification SAML de l’utilisateur auprès du fournisseur d’identité tiers
* Envoyer les données d’authentification SAML au serveur d’applications
* Recevoir un ticket d’authentification du serveur d’applications

Ce ticket peut ensuite être utilisé dans des requêtes adressées au serveur d’applications.

<Note>
  Le compte utilisateur doit exister dans la base de données FlexiCapture et disposer de toutes les autorisations requises.
</Note>

<div id="implementation">
  ## Implémentation
</div>

<div id="get-saml-data">
  ### Obtenir les données SAML
</div>

Les données SAML provenant d’un fournisseur d’identité tiers se présentent comme suit (cet exemple provient de 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>
```

Pour savoir comment obtenir des données d’authentification auprès d’un fournisseur d’identité tiers, consultez la documentation de ce fournisseur. Par exemple, OneLogin propose des [toolkits prêts à l’emploi](https://www.onelogin.com/resources/saml-toolkits) pour activer l’authentification SAML dans plusieurs langages de programmation.

<div id="send-saml-data-to-flexicapture-12-application-server">
  ### Envoyer les données SAML au serveur d’applications FlexiCapture 12
</div>

Encodez les données SAML en Base64 et envoyez-les au serveur d’applications à l’aide d’une requête POST à l’adresse `https://<Application Server>/Flexicapture12/Server/Saml`. Le nom du champ contenant les données SAML doit être `SAMLResponse`.

```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() );
    }
}
```

Si vous utilisez un tenant, ajoutez l’identifiant du tenant à l’URL du serveur, par exemple, `https://<ApplicationServer>/Flexicapture12/Server/Saml?Tenant=MyTenantName`

Pour que l’authentification fonctionne, un utilisateur dont le login correspond à l’identifiant figurant dans les données SAML doit être enregistré sur le serveur d’applications. La valeur du champ `/samlp:Response/saml:Assertion/saml:Subject/saml:NameID` sera utilisée comme login.

Le serveur d’applications renvoie une réponse comme suit :

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

La valeur de la balise `<ticket>` correspond au ticket d’authentification FlexiCapture 12. Vous pouvez utiliser ce ticket pour appeler toutes les interfaces du serveur d’applications qui nécessitent une authentification. Les requêtes envoyées aux services web FlexiCapture doivent utiliser l’authentification FlexiCapture (adresses commençant par `https://<ApplicationServer>/flexicapture12/Server/FCAuth/` ou `https://<ApplicationServer>/flexicapture12/Server/MobileApp/`).

<div id="use-the-authenticated-fc-12-ticket">
  ### Utiliser le ticket FC 12 authentifié
</div>

Vous pouvez transmettre le ticket au serveur au moyen d’un fichier de cookies (le fichier doit être nommé `FlexiCaptureTmpPrn`) ou d’un en-tête `Authorization: Bearer`. Exemple :

```
Authorization: Bearer 82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57
```

Nous recommandons d’utiliser l’en-tête. Les cookies sont pris en charge pour assurer la compatibilité avec les anciennes solutions.

Si l’authentification réussit, la réponse du serveur contiendra une valeur de ticket mise à jour, à la fois dans un cookie associé au même identifiant de connexion (`FlexiCaptureTmpPrn`) et dans l’en-tête `AuthTicket`. La requête suivante doit être effectuée à l’aide du ticket mis à jour (les tickets expirent au bout d’un certain temps).

<div id="set-up-a-trusted-certificate-on-the-application-server">
  ### Configuration d’un certificat de confiance sur le serveur d’applications
</div>

Le serveur d’applications vérifiera les données reçues du fournisseur d’identité. Pour que le serveur d’applications fasse confiance à ces données, elles doivent être signées avec un certificat personnalisé émis par une autorité figurant dans la base de données des autorités de confiance du serveur d’applications.

Importez le certificat dans la base de données ABBYY FlexiCapture. Les données seront désormais vérifiées à l’aide de ce certificat. Pour plus d’informations, voir [Configurer l’authentification unique](/fr/flexi-capture/sso-settings).

Si la vérification échoue, le serveur d’applications 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** du magasin de certificats Ordinateur local sur l’ordinateur exécutant le serveur d’applications.

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é.

**Téléchargez le projet et les éléments associés :** [SAML\_Example.zip](SAML_Example.zip)
