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

認証プロセスの概要

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 データは、JSON Web Token (JWT) を作成するために Base64 でエンコードされます。
using System.IdentityModel.Tokens.Jwt;
using System.Security.Cryptography.X509Certificates;

static string createEncryptedJwtToken(
X509Certificate2 encryptCert,
string issuer,
string audience,
string nameid,
TimeSpan expirationTimespan )
{
X509Signing Credentials signingCredentials = new X509Signing Credentials( 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 リクエストを使用して行います。
tenant を使用している場合は、tenant の識別子を 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 に登録されている必要があります
<?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