4

我需要通过 BizTalk 发送适配器调用休息 API 服务。API 仅使用标头中的令牌进行身份验证/授权。我已经使用 httpclient 在 C# 控制台应用程序中对此进行了测试,它工作正常:

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 适配器,为安全选择“传输”(它是一个 https 站点,因此需要安全性(?)),没有指定凭据类型,并将带有令牌的标头放在“消息”选项卡中适配器配置。这失败了,但出现以下异常:System.IO.IOException:身份验证失败,因为远程方已关闭传输流。

我已经尝试在谷歌上搜索这个特定的场景,但找不到解决方案。我确实找到了这篇文章,其中包含有关 OAUth 处理的建议,但令我惊讶的是,即使使用 BizTalk 2016,我仍然必须为如此简单的事情创建自定义程序集。

有谁知道如何在 wcf-http 发送适配器中做到这一点?

4

2 回答 2

2

弄清楚了。我应该将“证书”用于客户端凭据类型。

我只需要:

  1. 在消息选项卡的出站 HTTP 标头框中添加令牌,然后为传输客户端凭据类型选择“传输”安全性和“证书”。
  2. 通过浏览器(手动)从 API 网站下载证书并将其安装在本地服务器证书存储中。
  3. 然后,我通过“浏览”按钮在适配器的相应字段中选择了该证书和指纹(必须滚动浏览可用的证书并选择我试图连接的 API/网站证书)。

当我运行 Fiddler 并将适配器代理设置设置为本地 Fiddler 地址 ( http://localhost:8888 ) 时,我偶然发现了这一点。我意识到,由于 Fiddler 与远程服务器协商 TLS 连接/证书(我在 fiddler 中启用了 tls1.2),消息能够通过但不能直接在适配器和远程 API 服务器之间(当 Fiddler 不运行时) .

于 2017-09-28T19:15:01.433 回答
2

是的,您必须编写自定义端点行为并将其添加到发送端口。事实上,即使使用 WCF-WebHttp 适配器,基本身份验证也不起作用,所以我目前正在编写一个端点行为来解决这个问题。

OAuth 的问题之一是每个人都遵循的标准不是一个,到目前为止,我不得不编写 2 种不同的 OAuth 行为,因为它们以不同的方式实现事物。一个使用秘密和时间戳的哈希必须获得一个令牌,另一个使用基本身份验证来获得一个令牌。此外,其中一个您可以使用相同的凭据获得多个令牌,而另一个将立即使旧令牌过期。

我必须为其编写自定义行为的另一件事是端点期望的 TLS 版本,因为默认情况下 BizTalk 2013 R2 尝试 TLS 1.0,然后如果网站不允许它会失败。

您可以通过投票添加对 OAuth 2.0 / OpenID Connect 身份验证的支持来向 Microsoft 反馈您希望拥有此功能

也许有人会开源他们的解决方案。见公告:BizTalk Server 拥抱开源!

于 2017-09-23T05:50:09.137 回答