簡體   English   中英

.NET Core 和 IIS 間歇性 403 訪問被拒絕

[英].NET Core and IIS Intermittent 403 Access Denied

好的 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 版本設置為“無托管代碼”
  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")]

授權膠水,其中 Configuration["RequireViewerRoles"] 是一個以逗號分隔的域組列表:

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

我是否進入了 .NET Core 2.0 錯誤領域,或者我錯過了什么?

原來是一條巨大的紅鯡魚!

這是一個 401.2“無效的服務器配置”錯誤。 我終於注意到一個模式,如果我打開文件夾安全權限對話框,應用程序將工作,這將強行點擊域控制器並緩存來自用戶域的組名。 應用程序可以正常工作大約 5 分鍾,然后拒絕再次進行身份驗證而不進行其他更改。

問題是通過在組上配置域名解決的,回想起來很明顯。 (域名\\\\域用戶)。 它在沒有域名的情況下工作的事實導致了很多混亂。 IIS 日志中沒有任何跡象表明此錯誤,最終通過反復試驗解決了該錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM