好的,Stackoverflow,在经过无果的研究后,我来到了这里!
我正在尝试使用Windows身份验证和SSL在IIS中托管.NET Core 2.0站点,但无论我尝试什么,我都会继续出现不一致/间歇性的403访问被拒绝错误。
如果有什么严重错误,我希望它永远不会起作用。但是,如果我重新启动站点和应用程序池,它可能会工作约3/10次。在事件查看器、应用程序日志或IIS跟踪日志中找不到任何有用的信息。
以下是我按照没有特定顺序执行的操作:
- 应用程序池以gmsa帐户身份运行,并具有对我的数据库(prod.service$)的权限
- 授予gmsa帐户“登录服务”和“批处理登录”的权限。
- 将IIS_IUSRS、prod.service$和域用户权限授予Web根文件夹。目前处于绝望状态下的完全控制。
- 将IIS_IUSRS、prod.service$和域用户权限授予证书。
- 启用Windows身份验证,禁用匿名身份验证
- 设置默认文档指向前端页面。
- 将应用程序池设置为“Load Profile”
- 将.NET CLR版本设置为“No Managed Code”
- 在web.config中将ForwardWindowsAuthToken设置为true
- 在站点 >身份验证 >右键单击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的错误领域,还是我漏掉了什么?