我创建了一个新的Asp.net core 2.1 Web应用程序,然后选择“ API”模板。 (我将身份验证更改为“ Windows”。然后添加了以下代码,以将Http.Sys
用于Windows身份验证。(https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.1&tabs=aspnetcore2x)
using Microsoft.AspNetCore.Server.HttpSys; // Added
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
// Added
.UseHttpSys(o =>
{
o.Authentication.Schemes = AuthenticationSchemes.NTLM |
AuthenticationSchemes.Negotiate;
o.Authentication.AllowAnonymous = false;
});
以下消息显示了运行应用程序时的输出消息。
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0] User profile is available. Using 'C:\Users\...\AppData\Local\ASP.NET\Da taProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. info: Microsoft.AspNetCore.Server.HttpSys.HttpSysListener[0] Start info: Microsoft.AspNetCore.Server.HttpSys.HttpSysListener[0] Listening on prefix: https://localhost:5001/ info: Microsoft.AspNetCore.Server.HttpSys.HttpSysListener[0] Listening on prefix: http://localhost:5000/ Hosting environment: Development Content root path: C:\work\WebApplication1 Now listening on: https://localhost:5001 Now listening on: http://localhost:5000 Application started. Press Ctrl+C to shut down.
但是,访问https://localhost:5001/api/values
时,浏览器会显示错误消息“无法访问此站点(连接已重置)”?
经过powershell测试
PS C:\work> Invoke-WebRequest https://localhost:5001/api/values Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send. At line:1 char:1 + Invoke-WebRequest https://localhost:5001/api/values + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand PS C:\work> Invoke-WebRequest http://localhost:5000/api/values Invoke-WebRequest : The remote server returned an error: (401) Unauthorized. At line:1 char:1 + Invoke-WebRequest http://localhost:5000/api/values + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Fiddler返回以下消息。
fiddler.network.https>与本地主机(对于#3)的HTTPS握手失败。 System.IO.IOException无法从传输连接中读取数据:现有连接被远程主机强行关闭。 <现有连接被远程主机强行关闭
Internet Explorer返回以下消息。
在“高级”设置中打开TLS 1.0,TLS 1.1和TLS 1.2,然后尝试再次连接到https://localhost:5001。如果此错误仍然存在,则可能是该站点使用了不受支持的协议或密码套件,例如RC4(有关详细信息的链接),认为不安全。请与您的站点管理员联系。
答案 0 :(得分:1)
您需要在ACL中添加/安装自签名证书,并且需要在本地的“受信任的根证书颁发机构”中添加。
或
您可以评论app.UseHttpsRedirection();
在launchSettings.json中,您需要具有以下内容:
"applicationUrl": "http://localhost:5000",
和
"iisExpress": {
"applicationUrl": "http://localhost:49845",
"sslPort": 0 //44382
答案 1 :(得分:0)
我有以下代码,它对我有用。在配置服务中,我有
services.AddAuthentication(Microsoft.AspNetCore.Server.HttpSys.HttpSysDefaults.AuthenticationScheme);
并在program.cs
中.UseStartup<Startup>()
.UseKestrel()
.UseHttpSys(options =>
{
options.Authentication.Schemes = AuthenticationSchemes.NTLM;
options.Authentication.AllowAnonymous = false;
options.MaxConnections = 1000;
})
.UseIISIntegration()
答案 2 :(得分:0)
对我来说,我必须注释掉Startup类的Configure(..)方法中的app.UseHttpsRedirection()行,并使用http://localhost:5000。
// app.UseHttpsRedirection();
我想如果我想使用https,我必须遵循@Bhavik Patel的建议并安装一个自签名证书。