Windows身份验证在调试时有效,但在服务器上无效,反之亦然

时间:2018-01-16 03:56:35

标签: c# asp.net-core visual-studio-code windows-authentication

我的.net核心asp mvc app中的Windows身份验证存在一个奇怪的问题。

我最初在BuildWebHost中设置了Program.cs

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .UseHttpSys(options =>
    {
        options.Authentication.Schemes =
            AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate;
        options.Authentication.AllowAnonymous = false;
    })
    .Build();

从vscode调试时这很好用。

我被提示以域用户身份登录,一切都很好。

但是,当我发布到我的Windows 7“服务器”IIS时,整个应用程序都失败并显示this error

  

HTTP错误502.5 - 进程失败

     

此问题的常见原因:

     

申请流程无法启动

     

应用程序流程已开始但随后停止

     

应用程序进程已启动但无法侦听已配置的端口

所以我将BuildWebHost改为

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .Build();

现在它在服务器上运行得很好,但是当我尝试从vscode调试时,我得到了

  

InvalidOperationException:未指定authenticationScheme,且未找到DefaultChallengeScheme。

这非常不方便,因为它可以工作,但每次我想发布或测试/调试应用程序时,我都必须删除那段代码。

我该如何解决这个问题,或者至少解决原因是什么?

1 个答案:

答案 0 :(得分:1)

IIS需要Kestrel,它不能与HttpSys一起使用。不幸的是,Kestrel没有自己的Windows身份验证,它依赖于IIS。 IIS是否为您的开发环境提供了一个选项?否则,您需要做一些尴尬的事情来检测您的环境,并相应地选择您的服务器。