【问题标题】:Windows Authentication Does not work on IIS with ASP.NET CoreWindows 身份验证不适用于带有 ASP.NET Core 的 IIS
【发布时间】:2020-08-02 07:42:44
【问题描述】:

我正在尝试对 ASP.NET Core MVC 应用程序使用 Windows 身份验证。 以下是问题陈述。

当应用程序使用 IISExpress 运行时,它运行时没有任何问题。但是当它在 IIS 中配置为站点并运行时,它会提示输入凭据,即使在输入更正的凭据后,应用程序也会显示状态为 401 的错误页面。

详情: 应用程序是一个普通的样板 ASP.NET Core MVC 应用程序,启用了 Windows 身份验证。我正在尝试寻找在实际应用中使用的解决方案。

框架:.NET Core 2.2

环境:装有 IIS 10.0 的 Windows Server 2019 机器上的 Visual Studio 2019

以下是我在样板应用程序中所做的更改。 更改 Startup.cs 文件以使用身份验证。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

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

        services.AddAuthentication(IISDefaults.AuthenticationScheme);

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

在 Startup.cs 文件的 Configure 方法中添加了以下代码行。

app.UseAuthentication();

在项目属性中启用 Windows 身份验证以进行调试,并使用 OutProcess 托管模型配置 IIS 托管。

在 IIS 中将应用程序配置为启用了 Windows 身份验证的网站。

我尝试过的事情。

  1. 尝试在 web.config 文件中添加 forwardWindowsAuthToken="true"
  2. 尝试在浏览器的 Internet 选项中将站点添加到本地 Intranet 站点中。
  3. 尝试在 WebHostBuilder 的 Program.cs 中使用 UseIIS()

来自我尝试过的 StackOverflow 问题的建议。

Asp.Net core MVC application Windows Authentication in IIS

ASP.Net Core: keep windows authentication

Asp.Net Core Windows Authentication Not Working in IIS

如果我在 IIS 和应用程序上都启用了 Windows 身份验证,则应用程序在浏览时会提示输入凭据。即使在输入当前凭据后,它也不会通过并重新提示。尝试 3 次后,应用程序显示错误页面并出现 401 错误。

如果我的应用程序提示输入凭据,我相信配置是正确的,但我不明白为什么即使在提供更正的凭据后它也不接受用户登录。

注意:所有活动、开发、调试、托管等都在同一台 Windows 2019 服务器机器上进行。这台机器也托管了一个域控制器,并尝试使用其中一个有效的域用户登录。

我现在完全一无所知,我尝试的任何事情最终都会导致同样的问题。 如果需要更多详细信息,请随时询问。

编辑 1 --------------------------------------------- -

我在 IIS 上使用端口 8081 配置我的网站并没有绑定名称,但收效甚微。

这样,当我浏览 http://localhost:8081 时,它会毫无问题地登录当前用户。但是,当我使用任何绑定名称(例如 sample.localapp.com)对其进行配置时,它会开始提示输入凭据,但从不接受它。

提前致谢。

【问题讨论】:

  • support.microsoft.com/en-ca/help/926642/… 首先避免著名的环回检查。
  • 我不确定客户的生产服务器@LexLi 是否可以更改任何注册表。为了提供更多上下文,目标应用程序将作为公司员工仅从公司网络内部使用的 Intranet 应用程序。所以期望是用他们当前的 AD 用户登录员工。
  • “并且机器正在托管域控制器”从来都不是一个好方法。 DC 应该只是 DC,所有其他角色(如 Web 服务器)都应该移动到另一台机器上。由于著名的环回检查等问题,您也无法在同一台服务器上测试 Web 应用程序。从其他机器启动浏览器,看看会发生什么。
  • 你是对的@LexLi。由于事情处于开发/测试阶段,所以一切都在同一台机器上。我没有尝试从其他机器托管/浏览应用程序。我需要看看我怎样才能做到这一点......因为这是客户端为开发/测试提供的唯一机器。
  • 开发/测试环境应该镜像生产环境,因此使用单个服务器只会给您带来不必要的麻烦。使用 Docker/Hyper-V 等虚拟化解决方案,可以很容易地衍生出一堆测试机实例,而不会消耗太多资源。

标签: c# asp.net-mvc asp.net-core windows-authentication iis-10


【解决方案1】:

请将 IIS_IUSRS 添加到发布文件夹或您的 Web 应用程序所在的位置

【讨论】:

    【解决方案2】:

    您好朋友,我知道您在问题中给出了答案,但我会尝试详细说明:

    c:\windows\system32\drivers\etc\host 文件和IIS 中删除您的绑定名称管理器转到您的网站右键单击它并选择编辑绑定...选项,编辑您的绑定网站清除主机名:字段,您现在可以编写在浏览器网址http://servername:port/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2019-01-20
      相关资源
      最近更新 更多