Zum Hauptinhalt springen

Übersicht über den Authentifizierungsprozess

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.
Das Benutzerkonto muss in der FlexiCapture-Datenbank vorhanden sein und über alle erforderlichen Berechtigungen verfügen.

Implementierung

SAML-Daten abrufen

<?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 zur Aktivierung der SAML-Authentifizierung in mehreren Programmiersprachen an.

SAML-Daten an den FlexiCapture 12 Application Server senden

Kodieren Sie die SAML-Daten in Base64 und senden Sie sie per POST-Anfrage an https://<Application Server>/Flexicapture12/Server/Saml an den Application Server. Der Name des Felds mit den SAML-Daten muss SAMLResponse sein. 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 zur Server-URL hinzu, z. B. https://<ApplicationServer>/Flexicapture12/Server/Saml?Tenant=MyTenantName Damit die Authentifizierung funktioniert, muss auf dem Application Server ein Benutzer mit einem Login registriert sein, das dem Bezeichner in den SAML-Daten entspricht. Der Wert des Felds /samlp:Response/saml:Assertion/saml:Subject/saml:NameID wird als Login verwendet.
<authTicket>
<userName>maksim_p@abbyy.com</userName> 
       <ticket>82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57</ticket> 
</authTicket>
Der Wert im Tag <ticket> ist das authentifizierte FlexiCapture 12-Ticket. Sie können dieses Ticket verwenden, um Aufrufe an alle Schnittstellen des Application Server auszuführen, die eine Authentifizierung erfordern. Anforderungen an FlexiCapture-Web-Services müssen mit der FlexiCapture-Authentifizierung gestellt werden (Adressen, die mit https://<ApplicationServer>/flexicapture12/Server/FCAuth/ oder https://<ApplicationServer>/flexicapture12/Server/MobileApp/ beginnen).

Verwenden des authentifizierten FC 12-Tickets

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

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 mithilfe dieses Zertifikats überprüft. Weitere Informationen finden Sie unter Einrichten von Single Sign-On. Wenn die Überprüfung fehlschlägt, richtet sich der Application Server nach dem Parameter AllowMixedModeCertificateValidation 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 Parameter AllowMixedModeCertificateValidation wird ignoriert. Laden Sie das Projekt und die zugehörigen Materialien herunter: SAML_Example.zip