[英]Asp.Net Core 2.1 SPA React Template with Windows Authentication
[英]How to start and stop an ASP.NET Core 2.1 app programmatically with Windows Authentication enabled?
我对ASP.NET Core 2.1应用程序有一组非常具体的需求,我似乎无法解决这个问题。 该应用程序的目的是演示如何使用自动化工具(如Selenium)使用Web代理,特别是针对使用NTLM身份验证的站点。
因为这是一个在其他正在运行的代码的上下文中使用的演示站点,所以我需要能够以编程方式启动和停止它。 我似乎无法找到任何方法来有效地使用Kestral和IIS / IIS Express来适当地启动和停止应用程序。
因为我想证明使用配置了代理的Web浏览器来浏览并通过此站点进行身份验证,并且因为大多数浏览器在浏览localhost
站点(及其堂兄弟127.0.0.1
和::1
)时绕过代理,我需要能够使用localhost以外的主机名来浏览站点,并且我在hosts文件中使用了一个简单的别名来实现此目的。 但是,这会让HTTP.sys正确,因为尝试注册除localhost结果之外的任何URL前缀,完全不出所料地知道HTTP.sys如何工作,在Access denied
错误中。
我已经检查了 其他 几个 答案 ,所有这些答案似乎已经过时,或者只是不适合我。
启动类如下:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<IISOptions>(iis => { iis.AutomaticAuthentication = false; });
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
}
如果我使用“IIS Express”配置文件在调试器中手动启动应用程序,它的工作原理是我收到提示输入凭据。 如果我使用“项目”配置文件,当然,它不起作用,因为Kestrel似乎不理解没有HTTP.sys的Windows身份验证。 如果我尝试使用任何编程方式来启动应用程序( WebHost.CreateDefaultBuilder().Build().StartAsync
),它无法提示进行身份验证,我猜测它的原因与它不起作用相同调试器中的“项目”配置文件。
关键是要在克隆演示存储库后避免用户进行最少的配置。 在完整的IIS中托管Web应用程序是一个非首发。 同样,需要管理员访问权限的解决方案(如使用netsh http add urlacl
)或以管理员netsh http add urlacl
运行也是非启动者,因为许多用户没有对其计算机的管理访问权限。
我正在尝试甚至可能吗? 我怎样才能将它拼凑起来以使其有效? “你想做的事情是不可能的”,这是一个非常有效的答案,但如果这是给出的答案,我想了解为什么这是不可能的更多信息。
我没有太多的IIS经验,也没有完全理解你的情况,但我希望我可以分享足够的帮助你解决这个问题。
您的问题似乎有三个方面:
我无法帮助1.关于Windows身份验证:
InProcess
和OutOfProcess
。 InProcess
) - 因此图中没有红隼。 当您选择项目配置文件时,您实际上是使用Kestrel( OutOfProcess
)自托管应用程序 - 因此除非您明确将其配置为充当反向代理,否则图片中没有IIS。 InProcess
或OutOfProcess
获得图片中的IIS,您就应该能够使用Windows身份验证。 关于启动和停止应用程序:
OutOfProcess
,您可以完全控制,您可以随意启动和停止,因为您可以访问WebHost
对象。 InProcess
,我不确定使用WebHost启动/停止是否可行,但您可以使用IApplicationLifetime.StopApplication()
停止它,并让IIS在下一个请求时为您启动它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.