У нас есть тестовая служба, которая использует 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();
}
}
}