メインコンテンツへスキップ

認証プロセスの概要

SAML 認証を使用すると、ABBYY FlexiCapture 12 のユーザーは、サードパーティの ID プロバイダー (Google や Facebook など) で認証を行い、その後、信頼できるサードパーティから認証成功に関するデータを Application Server に渡すことで、ユーザー名やパスワードなどの ID 情報を FlexiCapture の Application Server コンポーネントに送信せずに済みます。 ユーザーアプリケーションにおける SAML 認証プロセスは、次の手順で構成されます。
  • サードパーティの ID プロバイダーで認証する
  • サードパーティの ID プロバイダーからユーザーの SAML 認証データを取得する
  • SAML 認証データを Application Server に送信する
  • Application Server から認証済みチケットを受け取る
このチケットは、その後、Application Server へのリクエストで使用できます。
ユーザーアカウントは FlexiCapture データベース内に存在し、必要な権限をすべて持っている必要があります。

実装

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>
サードパーティのID プロバイダーから認証データを取得する方法の詳細については、そのID プロバイダーのドキュメントを参照してください。たとえば、OneLogin では、複数のプログラミング言語で SAML 認証を有効にするためのすぐに使えるツールキットを提供しています。

SAML データを FlexiCapture 12 Application Server に送信する

SAML データを Base64 でエンコードし、https://<Application Server>/Flexicapture12/Server/Saml に POST リクエストを送信して、Application Server に送信します。SAML データを含む field の名前は 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() ); } } テナントを使用している場合は、サーバー URL にテナントの識別子を追加します。例: https://<ApplicationServer>/Flexicapture12/Server/Saml?Tenant=MyTenantName 認証を機能させるには、SAML データ内の識別子と一致するログインを持つユーザーが Application Server に登録されている必要があります。/samlp:Response/saml:Assertion/saml:Subject/saml:NameID field の値がログインとして使用されます。
<authTicket>
<userName>maksim_p@abbyy.com</userName> 
       <ticket>82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57</ticket> 
</authTicket>
<ticket> タグ内の値が、認証済みの FlexiCapture 12 チケットです。このチケットは、認証が必要なすべての Application Server インターフェイスの呼び出しに使用できます。FlexiCapture Web サービスへのリクエストは、FlexiCapture 認証を使用して行う必要があります (https://<ApplicationServer>/flexicapture12/Server/FCAuth/ または https://<ApplicationServer>/flexicapture12/Server/MobileApp/ で始まるアドレス) 。

認証済みの FC 12 チケットの使用

cookie ファイル (ファイル名は FlexiCaptureTmpPrn である必要があります) または Authorization: Bearer ヘッダーを使って、チケットをサーバーに渡せます。例:
Authorization: Bearer 82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57
ヘッダーを使用することを推奨します。Cookie は、従来のソリューションとの互換性のためにサポートされています。 認証に成功すると、サーバーの応答には、更新されたチケット値が、同じログイン名 (FlexiCaptureTmpPrn) の Cookie ファイルと AuthTicket ヘッダーの両方に含まれます。次のリクエストは、この更新されたチケットを使用して行う必要があります (チケットは一定時間が経過すると期限切れになります) 。

Application Server で信頼できる証明書を設定する

Application Server は、ID プロバイダーから受信したデータを検証します。Application Server がこのデータを信頼するには、Application Server の信頼された認証局データベースに含まれる認証局が発行したカスタム証明書で、このデータが署名されている必要があります。 証明書を ABBYY FlexiCapture データベースにインポートします。以後、この証明書を使用してデータが検証されます。詳しくは、Single Sign-On の設定を参照してください。 検証に失敗した場合、Application Server は Web.config ファイルの <appSettings> 設定内にある AllowMixedModeCertificateValidation パラメーターを参照します。このパラメーターが true に設定されている場合、検証は、Application Server を実行しているコンピューターの Local Computer 証明書ストア内の Trusted Root Certification Authorities フォルダーに追加された証明書を使用して実行されます。 データベースに証明書が追加されていない場合、検証は Trusted Root Certification Authorities フォルダーにある証明書を使用して実行され、AllowMixedModeCertificateValidation パラメーターは無視されます。 プロジェクトおよび付属資料をダウンロードしてください: SAML_Example.zip