提示在Server 2016上输入Windows凭据的http.sys

时间:2018-12-19 21:15:12

标签: windows-authentication windows-server-2016 http.sys

我们有一个测试服务,该服务使用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();
        }
    }
}

0 个答案:

没有答案