.NET Core和IIS间歇性403访问拒绝

5

好的,Stackoverflow,在经过无果的研究后,我来到了这里!

我正在尝试使用Windows身份验证和SSL在IIS中托管.NET Core 2.0站点,但无论我尝试什么,我都会继续出现不一致/间歇性的403访问被拒绝错误。

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

以下是我按照没有特定顺序执行的操作:

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

还有一个细节是,我正在尝试使用来自不同域的用户进行身份验证,其中已设置单向信任。我正在使用来自“其他”域的凭据远程登录到主机,因此它具有可见性。

以下是我的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(Policy = "RequireViewerRole")]

授权粘合剂,其中Configuration["RequireViewerRoles"]是一个逗号分隔的域组列表:

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

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


我有其他在Windows/Linux之间运行的.NET Core应用程序,但这个特定的应用程序是其他生态系统应用程序的“前端”。我将其托管在IIS中,以便可以使用Windows身份验证活动目录登录,而不是自己管理凭据,因为它是一个内部网络应用程序。这还允许我在此应用程序和其他应用程序之间重复使用公共代码。 - Graum
1
请回到最基本的阅读IIS日志文件,https://support.microsoft.com/en-ca/help/943891/the-http-status-code-in-iis-7-0-iis-7-5-and-iis-8-0,并找出您遇到的403错误。如果没有这个,所有其他研究都是毫无意义的。 - Lex Li
你在哪里找到你遇到的具体403错误? - Peter Tirrell
1个回答

2
结果是一个巨大的误导!原来是401.2“无效的服务器配置”错误。我最终注意到了一个模式,即如果我打开文件夹安全权限对话框,它就会强制访问域控制器并缓存来自用户域的组名,则应用程序将正常工作。应用程序在大约5分钟后会正常工作,然后拒绝再次进行身份验证,而没有进行其他更改。
问题的解决方法是在群组上配置域名,在回想起来时显而易见(DomainName\\ Domain Users)。事实上,没有域名也能正常工作,这导致了很多困惑。IIS日志中没有任何指示此错误的内容,最终通过试错法解决了这个问题。

你能更详细地解释一下如何在组上配置域名吗?我觉得我可能遇到了类似的问题,但不确定你是如何解决的。谢谢。 - msharp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接