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

認証プロセスの概要

JSON Web Token (JWT) は、ABBYY FlexiCapture 12 Application Server とサードパーティ サービスの間でデータを安全にやり取りするために使用されるデータ形式です。JWT を使用して認証を行う場合、識別情報は Application Server に送信されません。認証はサードパーティ サービス側で行われ、その後、ユーザーが信頼できるサービスによって認証済みであることが Application Server に通知されます。

実装

JSONデータを取得する

JSONデータの例:
{"alg":"RS256","kid":"-JLCtyyTyF69AZrtjpk-xGs-nUE","x5t":"-JLCtyyTyF69AZrtjpk-xGs-nUE","typ":"JWT"}
{"nameid":"user","nbf":1572267172,"exp":1572267772,"iss":"ABBYY","aud":"test JWT app"}
JSON Web Token (JWT) を作成するため、ユーザー証明書を含むJSONデータはBase64でエンコードされます。 次のサンプルは、JWTトークンを作成します:
using System.IdentityModel.Tokens.Jwt;
using System.Security.Cryptography.X509Certificates;


static string createEncryptedJwtToken(
    X509Certificate2 encryptCert,
    string issuer,
    string audience,
    string nameid,
    TimeSpan expirationTimespan )
{
    X509SigningCredentials signingCredentials = new X509SigningCredentials( encryptCert );
    JwtHeader jwtHeader = new JwtHeader( signingCredentials );
    var claims = new Claim[]
    {
        new Claim( "nameid", nameid )
    };
    var now = DateTime.UtcNow;
    JwtSecurityToken newToken = new JwtSecurityToken(
        issuer,
        audience,
        claims,
        now,
        now.Add( expirationTimespan ),
        signingCredentials
    );
    var token = new JwtSecurityTokenHandler().WriteToken(newToken);
    return token;
}

JWT を Application Server に送信する

JWT は、次の URL を使用して Application Server に送信する必要があります: https://<ApplicationServer>/Flexicapture12/Server/jwt。これは POST リクエストで行います。
テナントを使用している場合は、テナントの識別子を Application Server URL に追加します: https://<ApplicationServer>/Flexicapture12/Server/jwt?Tenant=MyTenantName
static async Task<string> AuthenticateByJwtAsync( string jwtToken )
{
    var fields = new Dictionary<string, string>
    {
        { "JwtToken", jwtToken }
    };
    FormUrlEncodedContent content = new FormUrlEncodedContent( fields );
    using ( var client = new HttpClient() )
    {
        HttpResponseMessage response = await client.PostAsync( jwtServiceUrl, content );
        if ( response.StatusCode == HttpStatusCode.OK )
        {
            return response.Headers.GetValues( "AuthTicket" )?.First() ?? throw new Exception( "AuthTicket header not found" );
        }
        else
        {
            throw new Exception( await response.Content.ReadAsStringAsync() );
        }
    }
}
認証を機能させるには、JWT の識別子 (nameid ノードの値に含まれる) と一致するログインを持つユーザーが Application Server に登録されている必要があります。 Application Server は次のようなレスポンスを返します。
<?xml version="1.0" encoding="utf-8" ?>
<authTicket>
    <userName>user</userName>
    <ticket>79BB391216E9BBA3DA13E5F29669FF1EB48C387C8FDE41D473AA5698A2E16A8B6E91470F05F3C2FBF685630FD7683DC2FA42A900A007CFAD1AD310FEE1ADADFC</ticket>
</authTicket>
ticket field の値は、認証済みの ABBYY FlexiCapture 12 チケットです。このチケットを使用すると、認証が必要なすべての Application Server インターフェイスを呼び出すことができます。サービスへのアクセスには ABBYY FlexiCapture 認証を使用する必要があります。つまり、https://<ApplicationServer>/flexicapture12/Server/FCAuth/ または https://<ApplicationServer>/flexicapture12/Server/MobileApp/ で始まるアドレスを使用します。

認証済みの ABBYY FlexiCapture 12 チケットを使用する

認証済みの ABBYY FlexiCapture 12 チケットは、cookie ファイル (ファイル名は FlexiCaptureTmpPrn である必要があります) または Authorization: Bearer ヘッダーを使用してサーバーに渡すことができます。 たとえば:
Authorization: Bearer 82BD00C6601EB7F8EF4265450F934D4103C5CA2F010DE1C5FAB4CC830A82300C743D09E5477279733F283D0B6E1C93ACC30FE353D4D9396649965432AAA7994078C3CC63567A95A35E03DA6FDE020F57
Authorization: Bearer ヘッダーの使用を推奨します (cookie がサポートされるのは下位互換性のためだけです) 。

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

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