/ / RestSharp a NTLM autentifikácia nefunguje, ak pristupujete k API cez hostname - c #, asp.net-web-api2, owin, restsharp, ntlm

Overenie RestSharp a NTLM nefunguje, ak pristupujete k rozhraniu API prostredníctvom názvu hostiteľa - c #, asp.net-web-api2, owin, restsharp, ntlm

Mám problém s autentifikáciou NTLM na webových aplikáciách spoločnosti Owin, ktoré sa nachádzajú na internete. NTLM je povolené na strane servera i na strane klienta. V klientovi používam RestSharp.

Zákazník

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

služba

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

app.UseWebApi(config);

Ak pristupujem k tomuto rozhraniu API prostredníctvom prehliadača IP alebo prehliadača Chromepráve funguje, zatiaľ čo ak ho sprístupníte prostredníctvom názvu hostiteľa alebo internetového prehliadača, nie. Predpokladám, že to súvisí s restsharp pomocou httpclient, ktorý používa IE engine, ktorý v našej spoločnosti má niektoré nastavenia zabezpečenia lokálnych / verejných sietí, ktoré sa dostávajú do cesty pre IE. Ktokoľvek mal podobnú otázku a mal nejaký nápad, ako ho prekonať bez toho, aby ste prešli nastavením "Zmeniť nastavenia IE"?

Názov hlavičky hostiteľa

tu zadajte popis obrázku

Hlavička hovorov založená na IP

tu zadajte popis obrázku

Fiddler log, 1. dávka - volanie hostiteľa, 2. dávka - ip

tu zadajte popis obrázku

odpovede:

1 pre odpoveď č. 1

Použitie funkcie AuthenticationSchemes.Ntlm by malo pomôcť. Ale je to viac ako riešenie, pretože to bude nútiť Ntlm.


0 pre odpoveď č. 2

Môžete vynútiť restsharp používať NTLM pomocou poverenia vyrovnávacej pamäte.

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, čo je predvolené poverenie pre NTLM, nezdá sa, že by pracoval v takomto prípade.