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

时间:2018-04-12 16:54:31

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

好吧Stackoverflow,经过多次徒劳无功的研究后,我终于来了!

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

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

我没有按特定顺序完成的事情:

  1. 应用程序池作为gmsa帐户运行,拥有对我的数据库的权限(prod.service $)
  2. 授予作为服务登录的权限,并批量登录到gmsa帐户。
  3. 授予Web根文件夹的IIS_IUSRS,prod.service $和域用户权限。目前处于完全控制之外的绝望。
  4. 授予IIS_IUSRS,prod.service $和域用户对证书的权限。
  5. 启用Windows身份验证,禁用匿名身份验证
  6. 设置指向首页的默认文档。
  7. 将应用程序池设置为"加载个人资料"
  8. 将.NET CLR版本设置为" No Managed Code"
  9. 在web.config
  10. 中将ForwardWindowsAuthToken设置为true
  11. NTLM已作为Site>下的第一个身份验证提供程序移至列表顶部身份验证>右键单击Windows身份验证>提供商
  12. 还有一个细节是,我正在尝试与来自不同域的用户进行身份验证,其中设置了单向信任。我正在使用“其他人”的凭据远程登录主持人。域名,因此它具有可见性。

    这是我的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 [&#34; RequireViewerRoles&#34;]是以逗号分隔的域组列表:

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

    我是否已进入.NET Core 2.0错误区域,或者我错过了某些内容?

1 个答案:

答案 0 :(得分:1)

原来是一只巨大的红鲱鱼!

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

通过在组中配置域名解决了该问题,回想起来这是显而易见的。 (DomainName \\ Domain Users)。它在没有域名的情况下工作的事实导致了很多混乱。 IIS日志中没有任何迹象表明此错误,最终通过反复试验解决了这个错误。