我们有一个测试服务,该服务使用http.sys对使用Active Directory的用户进行身份验证,并返回一小段文字“ Hello Domain \ Username”。
将其部署在现有Windows Server 2012服务器上时,我们可以在Chrome中运行该服务,并且该服务会按预期返回。
在新的Windows Server 2016服务器上部署此服务时,我们可以点击该服务,但会提示您输入Windows凭据。当我们输入凭据时,它将起作用。
该服务在两个服务器上都以相同的Windows域帐户运行。这些服务器都是同一域和组策略的一部分。我们已经检查了这两个服务器是否在本地Intranet站点列表中。
我们想弄清楚如何使它在Server 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();
}
}
}