Мне нужно реализовать небольшой REST-сервер для управления удаленной БД, ничего особенного.
Безопасность НЕ является критической проблемой, поскольку этот сервер должен работать в среде интрасети; мы только хотим отфильтровать пользователей и перенаправить их на соответствующие ресурсы.
HttpListener listener = new HttpListener();
listener.Realm = "testserver1";
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
foreach (string s in prefixes)
{
listener.Prefixes.Add(s);
}
listener.Start();
Console.WriteLine("Listening...");
HttpListenerContext context = listener.GetContext();
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
string responseString = "<HTML><BODY>" + DateTime.Now.ToString() + "</BODY></HTML>";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
listener.Stop();
Этот код (взятый с сайта Microsoft) отлично работает со стороны сервера и - когда listener.GetContext () возвращает - я могу проверить имя пользователя и пароль из объекта User и установить, как обрабатывать запрос.
Изменение первоначального listener.AuthenticationSchemes = AuthenticationSchemes.Basic на
listener.AuthenticationSchemes = AuthenticationSchemes.Digest
он перестает работать так, как я ожидаю, и как эффективно работает схема базовой аутентификации.
Вызов listener.GetContext () никогда не возвращается. HttpListener SEEMS блокирует любой запрос, и со стороны клиента меня продолжают запрашивать имя пользователя и пароль.
Я попробовал локального пользователя, локального администратора, пользователя домена, администратора домена, около 500 названий фэнтези: ничего не работает.
GetContext () больше не возвращает.
Вы можете мне помочь?
Заранее спасибо.
Л.