如果通过主机名访问 API,则 RestSharp 和 NTLM 身份验证不起作用

RestSharp and NTLM authentication does not work if accessing API via hostname

我在 Owin 自托管 Web Api 上遇到 NTLM 身份验证问题。 服务器端和客户端都启用了 NTLM。在客户端我使用的是 RestSharp。

客户端

 _client = new RestClient(ConfigurationManager.AppSettings["UserAccessApi"]);
 _client.Timeout = 5000;
 _client.Authenticator = new NtlmAuthenticator();

服务

var listener =
 (System.Net.HttpListener)app.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = System.Net.AuthenticationSchemes.IntegratedWindowsAuthentication;

app.UseWebApi(config);

如果我通过 IP 或 Chrome 浏览器访问此 API,它就可以正常工作,而如果通过主机名或 Internet Explorer 访问它,则不会。我认为这与使用 IE 引擎的 httpclient 的 restsharp 有关,我们公司有一些 local/public 网络安全设置,这些设置妨碍了 IE。任何人都有类似的问题并且知道如何在不采用 "Change IE settings" 方式的情况下克服它?

基于主机名的调用header

基于IP的调用header

Fiddler 日志,第一批 - 主机名调用,第二批 - ip

使用 AuthenticationSchemes.Ntlm 应该会有帮助。但这更像是一种解决方法,因为它将强制 Ntlm。

您可以通过使用缓存凭证强制 restsharp 使用 NTLM。

var url = ConfigurationManager.AppSettings["UserAccessApi"];
var credential = new CredentialCache
{
 {
   new Uri(url), 
   "NTLM",
   new NetworkCredential(username, password)
  }
};
_client = new RestClient(url)
{
     Authenticator = new NtlmAuthenticator(credentials)
};

NetworkCredential,这是 NTLM 的默认凭据,似乎不适用于这种情况。