【问题标题】:.NET Core and IIS Intermittent 403 Access Denied.NET Core 和 IIS 间歇性 403 访问被拒绝
【发布时间】:2018-09-22 22:28:11
【问题描述】:

好吧,Stackoverflow,经过大量徒劳的研究,我终于来到了这里!

我正在尝试使用 Windows 身份验证和 SSL 在 IIS 之外托管一个 .NET Core 2.0 站点,但无论我尝试什么,我都会继续收到不一致/间歇性的 403 Access Denied 错误。

如果有什么大错特错,我希望它永远不会起作用。但是,如果我重新启动站点和应用程序池,它可能会工作约 3/10 次。在事件查看器、应用程序日志或 IIS 跟踪日志中找不到任何有用的信息。

我所做的事情没有特定的顺序:

  1. 应用程序池作为 gmsa 帐户运行,对我的数据库 (prod.service$) 具有权限
  2. 授予作为服务登录,并作为批处理登录到 gmsa 帐户。
  3. 授予 IIS_IUSRS、prod.service$ 和域用户对 Web 根文件夹的权限。目前处于绝望的完全控制之中。
  4. 授予 IIS_IUSRS、prod.service$ 和域用户对证书的权限。
  5. 启用 Windows 身份验证,禁用匿名身份验证
  6. 设置默认文档指向首页。
  7. 将应用程序池设置为“加载配置文件”
  8. 将 .NET CLR 版本设置为“无托管代码”
  9. 在 web.config 中将 ForwardWindowsAuthToken 设置为 true
  10. NTLM 已移至列表顶部,作为站点 > 身份验证 > 右键单击​​ Windows 身份验证 > 提供程序下的第一个身份验证提供程序

一个更详细的信息是,我正在尝试对来自不同域的用户进行身份验证,其中设置了单向信任。我正在使用来自“其他”域的凭据远程访问主机,因此它具有可见性。

这是我的 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\MCP.MVP.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true" startupTimeLimit="3600" requestTimeout="23:00:00" />
    <defaultDocument>
        <files>
            <add value="/home/index" />
        </files>
    </defaultDocument>
  </system.webServer>
</configuration>

<!--ProjectGuid: [REDACTED] -->

来自 Startup.cs:

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

来自 Program.cs

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

到处使用 Authorize 属性:

[Authorize(Policy = "RequireViewerRole")]

Authorization Glue,其中 Configuration["RequireViewerRoles"] 是域组的逗号分隔列表:

services.AddAuthorization(options =>
        {
            options.AddPolicy("RequireViewerRole", policy => policy.RequireRole(Configuration["RequireViewerRoles"].Split(',')));
        });

我是否进入了 .NET Core 2.0 的错误领域,还是我遗漏了什么?

【问题讨论】:

  • 我在 windows/linux 之间运行了其他 .net 核心应用程序,但是这个特定的应用程序是其他应用程序生态系统的“前端”。我将它托管在 IIS 之外,因此我可以使用 windows-auth 活动目录登录而不是自己管理凭据,因为它是一个 Intranet 应用程序。它还允许我在此应用程序和其他应用程序之间重用公共代码。
  • 请回到非常基本的阅读 IIS 日志文件 support.microsoft.com/en-ca/help/943891/… 并找出您遇到了哪个 403。否则,所有其他研究都将毫无意义。
  • 您在哪里可以找到您遇到的具体 403 错误?

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


【解决方案1】:

原来是一条大红鲱鱼!

这是一个 401.2“无效的服务器配置”错误。我终于注意到了一个模式,如果我打开文件夹安全权限对话框,应用程序可以工作,这将强行访问域控制器并缓存来自用户域的组名。该应用程序可以正常运行大约 5 分钟,然后拒绝再次进行身份验证,没有进行其他更改。

问题是通过在群里配置域名解决的,回想起来很明显。 (域名\\域用户)。它在没有域名的情况下完全有效的事实导致了很多混乱。 IIS 日志中没有任何迹象表明此错误,最终通过反复试验解决。

【讨论】:

  • 你能解释一下如何在群里配置域名吗?我想我可能在这里有类似的问题,但不确定你做了什么来解决它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多