我正在尝试使用 WebListener 服务在 IIS 下托管一个 ASP.NET Core 应用程序,并试图让它使用 Windows 身份验证。但是,当为我的"Web"命令指定 WebListener 并在 IIS 下部署和设置应用程序时,我会收到一个 502 响应,其中包含消息"Web 服务器在充当网关或代理服务器时收到无效响应"。
我能够在 IIS 下使用 Kestrel 成功托管应用程序,但不幸的是 Kestrel 不支持 NTLM(或者至少这是我阅读和体验到的(。
所以,我正在寻找一种方法来:
- 让应用程序使用 WebListener 而不是 Kestrel 工作,并且
- 让它与 Windows 身份验证一起使用
在本地使用 web 命令(即在 Visual Studio 中运行它(时,这一切都在本地工作。它只是在IIS下的WebListener中不起作用。
我安装了最新的 HttpPlatformHandler (1.2(。我已将转发WindowsAuthToken设置设置为true。我在配置中禁用了匿名身份验证并启用了 Windows身份验证。我的目标是 1.0.0-rc1-update1。
以下是我的 Startup.cs 文件中的一些配置代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseIISPlatformHandler();
SetupWindowsAuthForLocalDev(app);
app.UseMvc();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseDeveloperExceptionPage();
app.UseRuntimeInfoPage();
app.UseAutoMapper();
app.ConfigureStorageAccountForCors(_config);
loggerFactory.AddSerilog();
}
private static void SetupWindowsAuthForLocalDev(IApplicationBuilder app)
{
var listener = app.ServerFeatures.Get<WebListener>();
if (listener != null)
{
listener.AuthenticationManager.AuthenticationSchemes =
AuthenticationSchemes.NTLM;
}
}
任何帮助将不胜感激。感谢您抽出宝贵时间阅读本文。
HttpPlatformHandler不支持WebListener,所以我认为你无法实现你想要的。查看 github 上的这个线程以获取更多详细信息。