【问题标题】:Aspnet Core 1.1 Missing Windows Authentication when publishedAspnet Core 1.1 发布时缺少 Windows 身份验证
【发布时间】:2017-10-18 19:32:13
【问题描述】:

我注意到在发布我的新 Aspnet Core 1.1(刚刚更新到 VS 2017)项目时,它总是缺少 web.config 中的 forwardWindowsAuthToken="true"

更多信息和我找到的解决方法在这里:

https://developercommunity.visualstudio.com/content/problem/26751/publish-aspnet-core-to-iis-with-windows-authentica.html

我也尝试添加:

services.Configure<IISOptions>(options => { options.ForwardWindowsAuthentication = true; });

我的 ConfigureServices 方法,但它没有帮助。

所以我的问题是,有没有办法让它正常工作?除了必须在部署后手动编辑 web.config 之外的一些命令行参数或其他自动化方式吗?

我认为这并不重要,但这是针对 4.6.2 而不是核心的 asp.net core 1.1。

编辑:澄清一下,添加forwardWindowsAuthToken="true" 有效,问题在于它不像在我们基于核心 1.0 的项目中那样自动添加。我想知道是否有一种方法可以在生成 web.config 时轻松实现自动化。

【问题讨论】:

  • 您如何托管您的应用程序? IIS? Kestrel 通过 Windows 服务?
  • @DOMZE 我们正在使用 IIS

标签: asp.net-core asp.net-core-1.1


【解决方案1】:

所以,我在针对完整框架 4.6.2 和 Windows 身份验证编译的 .NET Core 1.1 上使用 IIS/Kestrel,没有问题。首先,我的项目中有一个带有我的配置的 web.config,它与我的应用程序一起发布,所以我不必每次都覆盖它,它是我项目的一部分,包含很多对我有用的自定义,除非我误解了你也可以使用它。然后,在我的情况下,forwardWindowsAuthToken="true" 足以能够使用类似HttpContext.User.Identities.FirstOrDefault(id => id.GetType() == typeof(WindowsIdentity)); 的一段代码来检索 Windows 身份验证

我认为您缺少 IIS 级别的设置,forwardWindowsAuthToken 还不够,您还必须告诉 IIS 这个特定的 Web 应用程序正在使用 Windows 身份验证。为此,我配置了 Web 应用程序的“身份验证”部分,启用 Windows 身份验证,并选择合适的提供程序(在我的情况下进行协商)。如果您只是启用匿名身份验证,则 IIS 不会向客户端询问用户的身份(使用协商和 kerberos 票证等身份验证协议),也不会将其传输到您的 .NET Core 应用程序。

【讨论】:

  • 添加forwardWindowsAuthToken="true" 效果很好,问题是它没有自动添加到web.config。一旦我们添加它,它就可以正常工作。我想我们可以只包含一个 web.config,但我喜欢在部署时自动生成它,只是希望它能够像 v 1.0 一样正确包含 forwardWindowsAuthToken="true"
  • 我不知道你为什么要让它自动生成。我个人使用它来自定义 IIS 的行为并将其包含在我的项目中。我用它来定义 requestTimeout、设置 stdoutLogFile 的路径或设置 ASPNETCORE_ENVIRONMENT (开发、登台、生产......)我看不出自动生成的 web.config 如何猜测我需要什么。也许我错了,但我不认为在你的项目中有一个 web.config 是不好的做法,我认为相反,应该这样做。
  • 在它正确自动生成之前(1.0),我假设他们会有更多的功能,并且会自动放入文件中,所以让它自动生成是一个很好的功能,以及为什么他们最初将其删除,而不是像以前版本的 asp.net 那样总是有一个。现在使用 web.config 是一个很好的解决方法,但最好能完全解决这个问题。
  • 我想这取决于您的观点和您的要求,但您也可以反过来看:他们通过提高安全性来修复它,不允许默认设置某些身份。例如,在我的项目中,默认情况下,我更喜欢没有定义身份,除非我决定激活要传输的 Windows 身份,如果我不小心忽略来自 Windows 身份验证的身份,这可能会提供对某些资源的访问权限。
猜你喜欢
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 2018-02-15
  • 2015-06-01
  • 1970-01-01
  • 2018-07-21
  • 2019-08-11
  • 1970-01-01
相关资源
最近更新 更多