使用以下角度运行角度时:
ng serve --proxy-config proxy.config.js
和.net核心:
dotnet run
Windows身份验证永远不会对用户进行身份验证。
但是,从Visual Studio F5运行应用程序时,用户已经过身份验证,(相同的端口和所有内容)。
proxy.config.js
const Agent = require('agentkeepalive');
module.exports = {
'/api': {
target: 'http://localhost:5000',
secure: false,
agent: new Agent({
maxSockets: 100,
keepAlive: true,
maxFreeSockets: 10,
keepAliveMsecs: 100000,
timeout: 6000000,
keepAliveTimeout: 90000
}),
onProxyRes: proxyRes => {
let key = 'www-authenticate';
proxyRes.headers[key] = proxyRes.headers[key] &&
proxyRes.headers[key].split(',');
}
}
};
iisSettings
iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress": {
"applicationUrl": "http://localhost:5000/",
"sslPort": 0
}
}
Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404 &&
!Path.HasExtension(context.Request.Path.Value) &&
!context.Request.Path.Value.StartsWith("/api/"))
{
context.Request.Path = "/index.html";
await next();
}
});
app.UseMvcWithDefaultRoute();
app.UseDefaultFiles();
app.UseStaticFiles();
}
}
为什么dotnet run和dotnet watch run不能用于Windows身份验证但是Visual Studio F5呢?
更新
我尝试添加" weblistener"而不是在项目属性中启用身份验证。添加weblistener之后,我能够使用dotnet运行进行身份验证,但由于某些原因我无法再使用VS F5进行调试...
.UseHttpSys(options =>
{
options.Authentication.Schemes = AuthenticationSchemes.NTLM;
options.Authentication.AllowAnonymous = false;
})
答案 0 :(得分:0)
如果很快:dotnet run
启动应用程序而不使用IIS作为反向代理,因此忽略所有IIS设置
只有从Visual Studio运行应用时,才会使用launchSettings.json
部分iisSettings
。
此json文件包含与每个调试配置文件关联的项目特定设置,Visual Studio配置为用于启动应用程序,包括应使用的任何环境变量。
执行dotnet run
命令the Web Server (Kestrel by default) starts and hosts the app时。
从VS启动应用程序时,IIS Express实例也配置为应用程序的反向代理。这是启用Windows身份验证。
查看IIS Publishing以获取有关如何配置IIS + ASP.NET核心应用程序的详细信息。
答案 1 :(得分:0)
如果您不使用HTTPSYS或Weblistener,(weblistener在2.0中用httpsys替换?),则dotnet cli不支持Windows身份验证。
没有Windows,没有Windows身份验证。
如果您在IIS中发布应用程序(不使用httpsys或weblistener),我不确定您应该如何在本地开发(在IIS中不受支持)。
我目前正在使用IIS Express,这很痛苦。
答案 2 :(得分:0)
我发现David Fowler对类似问题做出了回应。 网址:https://github.com/aspnet/HttpSysServer/issues/425
有了这些更改,我既可以在Visual Studio中运行,也可以从dotnet run命令中运行。