2016-08-22 13 views
0

Я создал службу ClickOnce, используя HttpListener. Мне нужно, чтобы проверить подлинность подключения пользователя:HttpListener и IntegratedWindowsAuthentication по всей сети

HttpListener listener = new HttpListener(); 
listener.Prefixes.Add("http://*:80/ClickOnce/"); 
listener.AuthenticationSChemes = AuthenticationSchemes.IntegratedWindowsAuthentication; 
while (true) 
{ 
    var context = listener.GetContext(); 
    var id = context.User.Identity as WindowsIdentity; 
    if (id != null) 
    { 
     using (var impersonated = id.Impersonate()) 
     { 
      ... 
     } 
    } 
} 

Это прекрасно работает, пока служба находится на той же машине, что и клиент HTTP. Но если я попытаюсь подключиться к сервису с другой машины, он отказывается аутентифицироваться.

Если я подключаюсь через Internet Explorer, он запрашивает имя пользователя/пароль, пытается подключиться и затем возвращается к приглашению.

Если я подключаюсь через Chrome, он просто говорит: «Эта веб-страница недоступна ERR_INVALID_AUTH_CREDENTIALS».

Если я бегу VSTOInstaller.exe, он дает следующее сообщение об ошибке:

System.Deployment.Application.DeploymentDownloadException: Downloading http://.../OutlookAddin.vsto did not succeed. 
System.Net.WebException: The remote server returned an error: (401) Unauthorized. 
System.ComponentModel.Win32Exception: The target principal name is incorrect 
    at System.Net.NTAuthentication.GetOutgoingBlob(Byte[] incomingBlob, Boolean throwOnError, SecurityStatus& statusCode) 
... 

Если настроить анонимную проверку подлинности, что позволяет запросов через, но я не могу подтвердить подлинность пользователей.

Может ли HttpListener аутентифицироваться по сети? Или есть другая альтернатива HttpListener, которая поддерживает этот сценарий правильно?

ответ

0

Боюсь, что уже слишком поздно, но на основе вашего описания ошибки это может быть (есть) проблема с аутентификацией Kerberos.

В частности, это либо отсутствие записей SPN, либо несоответствие в заголовке запроса. Проверьте, что было фактически отправлено в Fiddler, и убедитесь, что SPN соответствует записи. Я бы также заподозрил указанный порт в ваших префиксах. Эта ошибка часто возникает, если у вас есть нестандартный порт в URL-адресе.

+1

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [От обзора] (/ review/low-quality-posts/17027164) –

+0

Это довольно поздно, я портировал все это на IIS, потому что это был единственный способ заставить его правильно аутентифицироваться. –