http.sys, запрашивающий учетные данные Windows на Server 2016 - PullRequest
0 голосов
/ 20 декабря 2018

У нас есть тестовая служба, которая использует http.sys для аутентификации пользователя с помощью Active Directory и возвращает простой текст с надписью «Hello Domain \ Username».

При развертывании этого на существующем Windows ServerСервер 2012, мы можем запустить сервис в Chrome, и он вернется, как и ожидалось.

Когда мы развернем его на новом сервере Windows Server 2016, мы сможем подключиться к сервису, но он запросит учетные данные Windows.Когда мы вводим учетные данные, это работает.

Служба работает как одна и та же учетная запись домена Windows на обоих серверах.Серверы являются частью одного домена и групповой политики.Мы проверили, что оба сервера находятся в списке локальных сайтов интрасети.

Мы хотим выяснить, как заставить его входить в систему без запроса при запуске на Сервере 2016.

Пример кода:

using System;

namespace HttpSysTest
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Net.HttpListener httpListener = new System.Net.HttpListener();
            httpListener.Prefixes.Add("http://*:80/");
            httpListener.AuthenticationSchemes = System.Net.AuthenticationSchemes.IntegratedWindowsAuthentication;
            httpListener.Start();
            httpListener.BeginGetContext(new AsyncCallback(CallBack), httpListener);

            System.Console.WriteLine("...");
            System.Console.Read();
        }

        private static void CallBack(IAsyncResult asyncResult)
        {
            System.Net.HttpListener listener = asyncResult.AsyncState as System.Net.HttpListener;
            listener.BeginGetContext(CallBack, listener);
            var ctx = listener.EndGetContext(asyncResult);
            byte[] buffer = System.Text.Encoding.Default.GetBytes($"User: {ctx.User.Identity.Name}. Authentication Type: {ctx.User.Identity.AuthenticationType}");
            ctx.Response.OutputStream.Write(buffer, 0, buffer.Length);
            ctx.Response.OutputStream.Close();
        }
    }
}
...