我正在使用ASP.NET 5,在我的解决方案中我有Web API,Identity Server和Angular 2项目,我使用Identity Server验证Angular 2客户端,Angular 2客户端通过在http请求中传递令牌和web api身份验证来使用web api令牌并给出响应,为此我编写了一个自定义属性,用于检查用户是否经过身份验证
当我使用API时,我遇到异常,Web API返回500内部服务器错误。
System.InvalidOperationException:IDX10803:无法从''http://xx.xx.xx.x:3926/.well-known/openid-configuration'获取配置。 ---> System.IO.IOException:IDX10804:无法从''http://xx.xx.xx.x:3926/.well-known/openid-configuration'检索文档。 ---> System.AggregateException:发生一个或多个错误。 ---> System.Net.Http.HttpRequestException:发送请求时发生错误。 ---> System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或建立连接失败,因为连接的主机无法在System.Net.Service.ConnectSocketInternal的System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)上响应xx.xx.xx.x:3926(布尔connectFailure,Socket s4,Socket s6,Socket&套接字,IP地址和地址,ConnectSocketState状态,IAsyncResult asyncResult,异常和异常)
如果identityserver和访问令牌验证中间件托管在同一个应用程序中,则启动时会出现竞争条件。
验证中间件尝试加载尚未提供的发现文档。
在这些方案中,将验证中间件上的DelayLoadMetadata
标志设置为true。
如果完全禁用发现端点,则需要在验证选项上配置颁发者和密钥材料。
我使用了这样的东西,它解决了我的问题。
services.AddAuthentication(o => {
o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddCookie(cfg => cfg.SlidingExpiration = true)
.AddJwtBearer(cfg =>
{
cfg.Audience = "http://localhost:4200/";
cfg.Authority = "http://localhost:5000/";
cfg.RequireHttpsMetadata = false;
cfg.SaveToken = true;
cfg.TokenValidationParameters = tokenValidationParameters;
cfg.Configuration = new OpenIdConnectConfiguration(); <-- Most IMP Part
});
检查您的appsettings.json租户ID,并确保您不会意外复制超出租户ID所需的内容。
此错误的原因是代理,并能够通过实现以下代码解决它:
options.BackchannelHttpHandler = new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
Proxy = new WebProxy(Configuration["System:Proxy"])
};
如果您“无法从以下位置检索文档:'[pii is hidden]'”,则需要在下面添加到ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
......
IdentityModelEventSource.ShowPII = true;
}
我希望这有帮助。
我收到此错误消息有几个原因。一个是用@leastprivilege回答解决的。另一个原因是我的Identity Server项目中的证书文件在版本控制中丢失了。所以我只是用原件替换了损坏的文件,然后就可以了。
重建我的SSO项目解决了我的问题。在重建项目期间,还恢复了Nuget包。希望这对你有所帮助。
如果这有助于其他任何人。
将项目升级到.net core 2.0后出现此错误
修复。
在appsettings.json中更改实例的名称而不是
“AADInstance”:“https://login.microsoftonline.com/”
使用