在 .NET Core Weblistener 应用程序中调试集成 Windows 身份验证

Debugging integrated Windows authentication in .NET Core Weblistener app

我有一个使用 OWIN 和 windows 身份验证的 .NET Core 应用程序 AuthenticationSchemes.Negotiate,托管在 Weblistener 而不是 IIS 上。

在某些设置中,这可以正常工作,而在其他设置中,会显示登录提示,并且无法对用户进行身份验证。但是,我永远不知道 为什么 它有效或为什么无效。

我如何在生产环境中调试这样的问题,我可以在应用程序中更改什么以使其在生产环境中可调试?我可以查看哪些日志,在哪里可以启用额外的日志记录等?是否有任何内置方法可以更改与生产中的身份验证相关的应用程序设置(除了更改代码,或添加自定义代码以使其可配置,或将其托管在 IIS 上?)

注意:我 对如何 "fix" 问题感兴趣,因为它可能有许多不同的原因,并且会在许多不同的服务器上到处弹出.

更多详情:

了解一些事情会很有帮助,

  1. Visual Studio 是什么版本?
  2. 什么版本of.NET核心

the user cannot be authenticated

您在使用 cookie 吗?

What logs can I look at

您可以启用登录 appsettings.json

Logging in .net core

除此之外,您还可以查看 asp.net 个条目的事件查看器

除此之外,不同的浏览器会以不同的方式处理这些请求,如果它在一个浏览器中有效但在另一个浏览器中无效,我会从那里开始

通过消除未知因素(例如 .NET Core 应用程序),问题更易于调试。 WebListener(或 HttpSysServer 或 Kestrel)中的集成 Windows 身份验证 (IWA) 与 IIS 中的 IWA 没有太大区别。因此,第一步是通过设置启用 IWA 并禁用匿名身份验证的空 IIS 网站、应用程序或虚拟目录来重现问题,并绑定到与实际应用程序相同的主机名。

如果问题可以重现,那么 IIS 会提供更好的方法来调试问题(例如失败的请求跟踪 - 这完全没有帮助,或者使用 NTLM 而不是 Negotiate 作为首选提供程序,或者禁用内核模式,等)。

如果使用 Kerberos(在生产中很可能使用),则可以在客户端计算机上启用 Kerberos 日志记录,方法是在 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters 中创建名称为 LogLevel 的注册表值,键入 DWORD 和值 0x1,根据 https://support.microsoft.com/en-us/help/262177/how-to-enable-kerberos-event-logging。然后可以使用事件查看器在 System 日志中查看 Kerberos 事件。

如果无法在 IIS 中复制问题,则说明 .NET Core 应用程序存在问题,但这不太可能,因为在应用程序代码中设置 IWA 非常简单,几乎不可能出错。如果它在一个系统上工作而不在另一个系统上工作,则可能与 Kerberos、AD、主机名等有关。