2017-09-22 7 views
4

BizTalk送信アダプタ経由でAPIサービスを呼び出す必要があります。 APIは認証/認可のために単にヘッダー内のトークンを使用します。私はHTTPClientのを使用してC#のコンソールアプリケーションでこれをテストして、それが正常に動作します:BizTalk 2016:APIトークンでHTTP送信アダプタを使用する方法

string apiUrl = "https://api.site.com/endpoint/<method>?"; 
     string dateFormat = "dateFormat = 2017-05-01T00:00:00"; 

     using (var client = new HttpClient()) 
     { 

      client.DefaultRequestHeaders.Add("token", "<token>"); 
      client.DefaultRequestHeaders.Add("Accept", "application/json"); 

      string finalurl = apiUrl + dateFormat; 
      HttpResponseMessage resp = await client.GetAsync(finalurl); 
      if (resp.IsSuccessStatusCode) 
      { 
       string result = await resp.Content.ReadAsStringAsync(); 
       var rootresult = JsonConvert.DeserializeObject<jobList>(result); 
       return rootresult; 

      } 
      else 
      { 
       return null; 
      } 
     } 

しかし、私が電話をかけると、応答を処理するためのBizTalkを使用したいです。

私はwcf-httpアダプタを使用して、セキュリティのために 'Transport'を選択しようとしました(これはセキュリティが必要な(つまりセキュリティが必要です(?))) 'タブをクリックします。これは例外ですが、失敗します。System.IO.IOException:リモートパーティーがトランスポートストリームを閉じたため、認証に失敗しました。

私はこの特定のシナリオでグーグルを試みており、解決策を見つけることができません。私はthisの記事でOAUthの処理についての提案を見つけましたが、私はBizTalk 2016を使用しても、それほどシンプルなカスタムアセンブリを作成する必要があることに驚いています。

これはどのようにwcf - httpの送信アダプタで行うことができます知っていますか?

答えて

2

はい、カスタムエンドポイント動作を作成し、送信ポートに追加する必要があります。実際にはWCF-WebHttpアダプタでさえもBasic Auth doesn't workだから、私は現在この問題に対処するためにエンドポイントビヘイビアを作成しています。

OAuthの問題の1つは、誰もが従う標準が1つもないことです。これまでは、2つの異なるOAuth動作を別々に実装していました。 1つは秘密とタイムスタンプを使用してハッシュ化してトークンを取得し、もう1つはBasic Authを使用してトークンを取得する必要があります。同じクレジットを使用して複数のトークンを取得することもできますが、一方は古いトークンをすぐに期限切れにすることもできます。

カスタムビヘイビアを記述しなければならないもう1つの点は、エンドポイントがデフォルトで期待するTLSのバージョンで、BizTalk 2013 R2はTLS 1.0を試行してからWebサイトが許可しないと失敗します。

あなたはできますが、たぶん誰かがソース自分のソリューションを開きますAdd support for OAuth 2.0/OpenID Connect authentication

の投票によって、この機能を持っているしたいマイクロソフトへのフィードバック。お知らせをご覧ください:BizTalk Server embrace open source!

2

私は、クライアント証明書の種類として '証明書'を使用していたはずです。

私はちょうどに持っていた:

  1. メッセージ]タブでアウトバウンドHTTPヘッダボックスにトークンを追加して、「交通のセキュリティおよびTransportクライアント資格情報の種類のための「証明書」を選択します。
  2. ブラウザ経由でAPIのWebサイトから証明書をダウンロードし(手動で)、ローカルサーバーの証明書ストアにインストールします。
  3. 「ブラウズ」ボタン(使用可能な証明書をスクロールして、接続しようとしていたAPI /ウェブサイトの証明書を選択していた)を介して、アダプターの対応するフィールドでその証明書と拇印を選択しました。

私はFiddlerを実行していて、アダプタのプロキシ設定をローカルFiddlerアドレス(http://localhost:8888)に設定したときにこれを検出しました。私は、FiddlerがリモートサーバーにTLS接続/証明書(私はtidd1.2 in fiddlerを有効にする)をネゴシエートしたので、メッセージは通過することができましたが、アダプターとリモートAPIサーバー間で直接には通信できませんでした。

関連する問題