为了避免出现502错误

问题描述

我构建了一个netcore(2.2)Web应用程序,该应用程序集成了Sustainsys库以与Microsoft ADFS SAML2连接并向用户授予访问权限。

它已经正常工作,但是最近用户在查看日志后似乎报告ADFS停止响应导致502错误的Web应用程序请求后,用户报告了502错误,在用户清除了浏览器cookie之后,它又可以正常工作了。 我真的不知道这是什么根本原因。

我一直在想是否有可能为Saml2Handler设置一个属性,以避免它一直等待响应直到失败

失败:Sustainsys.Saml2.AspNetCore2.Saml2Handler [0] 无法为idp http://id.enterprise.kr/adfs/services/trust System.Net.WebException加载元数据: 无法建立SSL连接,请参阅内部异常。 无法从传输连接中读取数据:现有 远程主机强行关闭了连接。 ---> System.Net.Http.HttpRequestException:无法建立SSL连接 建立,请参阅内部异常。 ---> System.IO.IOException:无法 从传输连接读取数据:现有连接 被远程主机强行关闭。 ---> System.Net.Sockets.SocketException:现有连接为 被远程主机强行关闭---内部异常堆栈结束 跟踪---在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError 错误) System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 令牌)在System.Net.FixedSizeReader.ReadPacketAsync(Stream 传输,AsyncProtocolRequest请求) System.Net.Security.SslState.ThrowIfExceptional()在 System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult) System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult 结果) System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult) System.Net.Security.SslStream。 c.b__47_1(IAsyncResult ) System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar,Func 2 endFunction,操作1 endAction,Task 1承诺,布尔值 requireSynchronization) System.Net.Http.ConnectHelper。EstablishmentSslConnectionAsyncCore(流流,> SslClientAuthenticationOptions sslOptions,CancellationToken cancelToken) ---内部异常堆栈跟踪的结尾--- 在System.Net.Http.ConnectHelper。EstablishmentSslConnectionAsyncCore(Stream 流,SslClientAuthenticationOptions sslOptions,CancellationToken cancelToken) 在System.Threading.Tasks.ValueTask 1.get_Result() at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage > request,CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask 1.get_Result() 在 System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask 1 > creationTask) at System.Threading.Tasks.ValueTask 1.get_Result() 在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,布尔值doRequestAuth,CancelationToken cancelToken) 在System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage请求, CancellationToken取消令牌) 在System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(任务1 sendTask,HttpRequestMessage request,CancellationTokenSource cts,Boolean disposeCts) at System.Net.HttpWebRequest.SendRequest() at System.Net.HttpWebRequest.GetResponse() --- End of inner exception stack trace --- at System.Net.HttpWebRequest.GetResponse() at System.Net.WebClient.GetWebResponse(WebRequest request) at System.Net.WebClient.OpenRead(Uri address) at Sustainsys.Saml2.Metadata.MetadataLoader.Load(String metadataLocation,> IEnumerable 1 signingKeys,布尔validateCertificate,字符串 minIncomingSigningAlgorithm) 在Sustainsys.Saml2.Metadata.MetadataLoader.LoadIdp(String metadataLocation,布尔值unpackEntitiesDescriptor) 在Sustainsys.Saml2.IdentityProvider.DoLoadMetadata()

     public async Task<IActionResult> Index(string returnUrl)
            {
                if (!User.Identity.IsAuthenticated)
                {
    
                    await Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.ChallengeAsync(HttpContext.Request.HttpContext,Sustainsys.Saml2.AspNetCore2.Saml2Defaults.Scheme,new AuthenticationProperties { RedirectUri = Url.Action(nameof(LoginCallback),new { returnUrl }) //RedirectUri = "/" 
                          }
    
                              );
                    
                    //seems like this one is raising error,when application got to many concurrent users request
                    var authenticateResult = await HttpContext.AuthenticateAsync(IdentityConstants.ExternalScheme);
    
                }
    
                SessionStateViewModel sessionState = new SessionStateViewModel();
    
                return RedirectToAction("IndexTrust","Home",new { @identity = sessionState });
        }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)