Skip to main content

 

SOAP

 

 

OutSystems

例: クライアント証明書を使用して認証する

このシナリオ例では、クライアント証明書によるSOAPリクエスト認証のサポートを追加します。

注記:

  • クライアント証明書のバイナリコンテンツを取得する方法は、いくつかあります。たとえば、ディスクファイル(*.pfxファイルなど)からの取得、PCの証明書ストアからの直接取得、データベースからの取得、クラウドストレージのBLOBからの取得などです。この例で示す拡張機能のアクションは、OutSystemsアプリケーション内のローカル変数や関数呼び出しの出力パラメータなどで、証明書のバイナリデータがすでに利用可能であることを想定しています。

  • 使用するクライアント証明書の署名がルートCA(認証局)ではなく中間CAのものである場合、環境のすべてのフロントエンドサーバーマシンにこの中間CAの証明書をインストールする必要があります。中間CAからルートCAまでの証明書チェーンにあるすべてのCAの証明書が、サーバーに保存されている必要があります。

以下の手順を実行します。

1.Integration Studioで拡張機能を作成し、クライアントの資格情報認証を設定するアクションを定義します。

以下の例では、Binary Data型のClientCertificateContent入力パラメータとText型のCertificatePassword入力パラメータを持つ「ClientCertificateContent」というアクションをIntegration Studioで定義しています。

2.[Edit Source Code .NET]をクリックします。Visual Studio .NETで、プロジェクトのターゲットフレームワークを設定し、System.ServiceModelアセンブリに参照を追加します。

3.以下のコードを入力し、Integration Studioで作成されたMssSetupCertificateAuth関数プレースホルダを置き換えます。

// required 'using' statements at the beginning of the file
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel;
using System.ServiceModel.Channels;
using OutSystems.SOAP.API;

/* ...*/

// replace the 'MssSetupCertificateAuth' function placeholder with the following code
public void MssSetupCertificateAuth(byte[] ssClientCertificateContent, string ssCertificatePassword) {
    ISOAPClient client = SoapRequest.GetCurrentClient();

    // configure binding to accept certificates
    var binding = client.Endpoint.Binding;

    if (binding is BasicHttpBinding) {
        ((BasicHttpBinding)binding).Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
    } else if (binding is CustomBinding) {
        var httpsElement = ((CustomBinding)binding).Elements.Find<HttpsTransportBindingElement>();
        if (httpsElement != null) {
            httpsElement.RequireClientCertificate = true;
        }
    }

    // add certificate to the client
    var cert = new X509Certificate2(ssClientCertificateContent, ssCertificatePassword);
    client.ClientCredentials.ClientCertificate.Certificate = cert;
} // MssSetupCertificateAuth

4.Visual Studio .NETを停止し、Integration Studioに戻ります。Integration Studioで、[1-Click Publish]ツールバーアイコンをクリックするか、またはF5キーを押して、拡張機能をパブリッシュします。

5.Service Studioで、アプリケーションモジュールに拡張機能のSetupCertificateAuthアクションへの参照を追加します。

6.SOAP WebサービスのSOAPコールバックフロー(OnBeforeRequestAdvanced)で、SetupCertificateAuthアクションをフローにドラッグします。

7.「ClientCertificateContent」パラメータで証明書のバイナリコンテンツを指定し、「CertificatePassword」入力パラメータで証明書のパスワードを指定します。
注記: クライアントの認証に使用される証明書には秘密鍵が含まれる必要があります。これはほとんどの場合、パスワードによって保護されています。

8.アプリケーションモジュールをパブリッシュしてアプリケーションをテストし、利用中のSOAP Webサービスに対して行われるリクエストが、指定されたクライアント証明書によって適切に認証されることを確認します。