Passer au contenu principal

Vue d’ensemble du processus d’authentification

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 Application Server de FlexiCapture en s’authentifiant auprès d’un fournisseur d’identité tiers (par ex. Google ou Facebook), puis en transmettant à l’Application Server 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 à l’Application Server
  • Recevoir un ticket d’authentification de l’Application Server
Ce ticket peut ensuite être utilisé dans des requêtes adressées à l’Application Server.
Le compte utilisateur doit exister dans la base de données FlexiCapture et disposer de toutes les autorisations requises.

Implémentation

Récupération des données SAML

<?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 pour activer l’authentification SAML dans plusieurs langages de programmation.

Envoi des données SAML au Application Server FlexiCapture 12

Encodez les données SAML en Base64 et envoyez-les au Application Server en effectuant une requête POST à l’adresse https://<Application Server>/Flexicapture12/Server/Saml. Le nom du champ contenant les données SAML doit être SAMLResponse. 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 son identifiant à l’URL du serveur, par exemple https://<ApplicationServer>/Flexicapture12/Server/Saml?Tenant=MyTenantName Pour que l’authentification fonctionne, un utilisateur dont le nom d’utilisateur correspond à l’identifiant contenu dans les données SAML doit être enregistré sur le Application Server. La valeur du champ /samlp:Response/saml:Assertion/saml:Subject/saml:NameID sera utilisée comme nom d’utilisateur.
<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 Application Server qui nécessitent une authentification. Les requêtes vers les services web FlexiCapture doivent être effectuées à l’aide de l’authentification FlexiCapture (adresses commençant par https://<ApplicationServer>/flexicapture12/Server/FCAuth/ ou https://<ApplicationServer>/flexicapture12/Server/MobileApp/).

Utilisation du ticket FC 12 authentifié

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

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

L’Application Server vérifiera les données reçues du fournisseur d’identité. Pour que l’Application Server 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 de l’Application Server. 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 Setting up Single Sign-On. 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 du magasin de certificats Ordinateur local sur l’ordinateur exécutant 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é. Téléchargez le projet et les éléments associés : SAML_Example.zip