0

我正在尝试使用 RestSharp / System.Net.Http 通过 OData WebService 从我们的本地 Dynamics (v8) 访问数据,但在这种情况下,我有点卡住了。我现在摆弄了几天,问题似乎出在身份验证的某个地方,但我不知道我做错了什么。

我向其发送 GET 请求的 URLhttps://host.fqdn/systemenv01/api/data/v8.2/$metadata使用的是能够正常登录动态的有效 Windows 域用户帐户。当我在 Firefox 或使用 NTLM-Auth 的最新版本的 Postman (v7.36) 中尝试此操作时,我得到了正确的元数据 XML 作为结果。

但是,当我使用 RestSharp 或简单地 System.Net.Http 尝试相同的操作时,我只得到一个 HTTP401-Unauthorized 作为响应。我试图做的是将用户凭据设置为 NetworkCredentials

var client = new RestClient(Url);
var request = new RestRequest(Method.GET);
client.FollowRedirects = true;
client.Timeout = -1;
client.PreAuthenticate = true;
request.Credentials = new NetworkCredential(User, Password);

但这似乎根本没有任何区别。有趣的是,响应包含一个名为“WWW-Authenticate”和值“Negotiate some.encrypted.string”的标题,但我不知道我应该用它做什么。如果有人可以帮助我解决这个问题,那就太好了!提前致谢!

4

1 回答 1

0

我发现了一件非常有趣的事情:

当我将 Dynamics 系统的域名替换为其 IP 地址时,身份验证工作正常。

我不确定这一点,但这个域低于.dev默认激活 HSTS 的 TLD。

我什至尝试使用来自另一个 TLD(原为.net)的另一个 FQDN 进行连接,并且效果也很好。

因此,我得出结论,问题源于 HSTS 的配置和处理。

于 2020-12-09T11:14:14.963 回答