【发布时间】:2018-09-22 22:28:11
【问题描述】:
好吧,Stackoverflow,经过大量徒劳的研究,我终于来到了这里!
我正在尝试使用 Windows 身份验证和 SSL 在 IIS 之外托管一个 .NET Core 2.0 站点,但无论我尝试什么,我都会继续收到不一致/间歇性的 403 Access Denied 错误。
如果有什么大错特错,我希望它永远不会起作用。但是,如果我重新启动站点和应用程序池,它可能会工作约 3/10 次。在事件查看器、应用程序日志或 IIS 跟踪日志中找不到任何有用的信息。
我所做的事情没有特定的顺序:
- 应用程序池作为 gmsa 帐户运行,对我的数据库 (prod.service$) 具有权限
- 授予作为服务登录,并作为批处理登录到 gmsa 帐户。
- 授予 IIS_IUSRS、prod.service$ 和域用户对 Web 根文件夹的权限。目前处于绝望的完全控制之中。
- 授予 IIS_IUSRS、prod.service$ 和域用户对证书的权限。
- 启用 Windows 身份验证,禁用匿名身份验证
- 设置默认文档指向首页。
- 将应用程序池设置为“加载配置文件”
- 将 .NET CLR 版本设置为“无托管代码”
- 在 web.config 中将 ForwardWindowsAuthToken 设置为 true
- 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