2016-08-09 6 views
0

Webサービスを呼び出すこのASP.Net Web APIアプリケーションがあります。現在(開発環境)Webサービス(SOAP)とASP.netアプリケーションは内部ネットワークにあります。プロダクションでは、Web APIアプリケーションはパブリックなインターネットになり、SOAPサービスは内部ネットワークに配置されます。クライアント証明書とSOAPヘッダー付きの承認ヘッダーを送信する理想的な方法

生産時には、すべてのサービスコールを検証し、内部WebサービスへのリクエストをリダイレクトするCA SOA Gatewayを使用します。ゲートウェイアプリケーションはHTTPSにあり、内部WebサービスはHTTPにあります。

CA SOAゲートウェイは、私はすべてのサービスに認可HTTPヘッダーを含むようにthis articleに従った2要素認証を必要とする、

  • 認証ヘッダ(OAuthの基本許可)
  • クライアント証明書

要求。それはうまく動作します。

リクエスト(< security mode=transport />)を含むクライアント証明書を含めるには、wcfクライアント設定(web.config)を使用しています。

証明書ストアではなく物理的な場所からクライアント証明書を追加したいとします。私は.Net 4.6.1を使用しており、DevAge.ServiceModelコード(指定されたサンプルコードから)を使用するためにSystem.ServiceModel名前空間を持っていないので、私はファイルのクライアント証明書を添付するためにthis articleをたどってきました。

質問:

  • すべてのサービス要求にHTTPヘッダーを含めるためのより良い方法はありますか?
  • 証明書ストアではなくファイルからクライアント証明書を含める方法はありますか?

注:Authorizationヘッダーとクライアント証明書は、SOAゲートウェイの検証用であり、Webサービスには必要ありません。

あなたのお手伝いをお待ちしております。

答えて

0

ヘッダーについては、IClientMessageInspectorインターフェイスを実装して、すべての通話にヘッダーを追加することもできます。このような 何か:IClientMessageInspectorについてAuthentication using HTTP Authorization Header in WCF SOAP API

もっと:How to add a custom HTTP header to every WCF call?

そして、ここでは、私が使用した別の良い例です。

public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel) 
{ 
    request.Properties.Add(HttpRequestMessageProperty.Name, new HttpRequestMessageProperty { .... }); 

} 

ここに良い例と同様の質問があります: MSDN

証明書について、瞬時にパスから証明書を追加することができますクライアントエンドポイントをngの、次のように:

var endpointIdentity = EndpointIdentity.CreateX509CertificateIdentity(new X509Certificate2(@"c:\cert\mycertificate.pfx", "password")); 
var endpoint = new EndpointAddress(new Uri("http://dns/service.svc"), endpointIdentity); 

またはこのように、クライアントに追加します。

var client = new YourService("BasicHttpBinding_IServiceInterface"); 
      client.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"c:\certifcate.pfx", "password", X509KeyStorageFlags.DefaultKeySet); 

それがお役に立てば幸いです。

関連する問題