OperationCanceledException при попытке аутентификации пользователя в AWS Cognito - PullRequest
0 голосов
/ 11 мая 2019

Я играю с AWS Cognito и пытаюсь аутентифицировать пользователя из моего API-интерфейса.

Но я получаю «Операция была отменена». исключение, и я не знаю почему!

Вот мой код:

 var authReq = new AdminInitiateAuthRequest()
 {
     UserPoolId = this.UserpoolId,
     ClientId = this.ClientId,
     AuthFlow = AuthFlowType.ADMIN_NO_SRP_AUTH
 };
 authReq.AuthParameters.Add("USERNAME", username);
 authReq.AuthParameters.Add("PASSWORD", password);

 try
 {
     AdminInitiateAuthResponse authResp = await 
     this.SecClient.AdminInitiateAuthAsync(authReq);
 }
 catch(Exception e)
 {
     //The operation was canceled exception
 }

Трассировка моего стека

at System.Net.Http.HttpClient.HandleFinishSendAsyncError (Исключение e, CancellationTokenSource cts) \ r \ n в System.Net.Http.HttpClient.FinishSendAsyncUnbuffered (Задача 1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)\r\n at System.Net.Http.HttpClient.GetStringAsyncCore(Task 1 getTask) \ r \ n в Amazon.Runtime.Internal.Util.AsyncHelpers. <> C__DisplayClass1_1 1.<<RunSync>b__0>d.MoveNext()\r\n --- End of stack trace from previous location where exception was thrown ---\r\n at Amazon.Runtime.Internal.Util.AsyncHelpers.ExclusiveSynchronizationContext.BeginMessageLoop() in D:\\JenkinsWorkspaces\\trebuchet-stage-release\\AWSDotNetPublic\\sdk\\src\\Core\\Amazon.Runtime\\Internal\\Util\\_mobile\\AsyncHelpers.cs:line 142\r\n at Amazon.Runtime.Internal.Util.AsyncHelpers.RunSync[T](Func 1 задача) в D: \ JenkinsWorkspaces \ требюш СЦЕНА-релиз \ AWSDotNetPublic \ SDK \ SRC \ Ядро \ Amazon.Runtime \ Internal \ Util \ _mobile \ AsyncHelpers.cs: линия 87 \ Amazon \ Amazon.AWSSDKUtils.DownloadStringContent (Uri uri, TimeSpan timeout, IWebProxy прокси) в D: \ JenkinsWorkspaces \ требюш СЦЕНА-релиз \ AWSDotNetPublic \ SDK \ SRC \ Ядро \ Amazon.Util \ AWSSDKUtils.cs: линия 1008 \ r \ n на Amazon.Util.EC2InstanceMetadata.GetItems (String lativeOrAbsolutePath, Int32 пытается, логическая ошибка D: \ JenkinsWorkspaces \ требюш СЦЕНА-релиз \ AWSDotNetPublic \ SDK \ SRC \ Ядро \ Amazon.Util \ _bcl + netstandard \ EC2InstanceMetadata.cs: линия 513 в Amazon.Util.EC2InstanceMetadata.get_IAMSecurityCredentials () в D: \ JenkinsWorkspaces \ требюш СЦЕНА-релиз \ AWSDotNetPublic \ SDK \ SRC \ Ядро \ Amazon.Util \ _bcl + netstandard \ EC2InstanceMetadata.cs: линия 311 \ r \ n в Amazon.Runtime.DefaultInstanceProfileAWSCredentials.FetchCredentials () в D: \ JenkinsWorkspaces \ требюш СЦЕНА-релиз \ AWSDotNetPublic \ SDK \ SRC \ Ядро \ Amazon.Runtime \ Credentials \ _bcl + netstandard \ DefaultInstanceProfileAWSCredentials.cs: линия 142 в Amazon.Runtime.DefaultInstanceProfileAWSCredentials.GetCredentials () в D: \ JenkinsWorkspaces \ требюш СЦЕНА-релиз \ AWSDotNetPublic \ SDK \ SRC \ Ядро \ Amazon.Runtime \ Credentials \ _bcl + netstandard \ DefaultInstanceProfileAWSCredentials.cs: линия 88 \ r \ n в Amazon.Runtime.DefaultInstanceProfileAWSCredentials.GetCredentialsAsync () в D: \ JenkinsWorkspaces \ требюш СЦЕНА-релиз \ AWSDotNetPublic \ SDK \ SRC \ Ядро \ Amazon.Runtime \ Credentials \ _bcl + netstandard \ DefaultInstanceProfileAWSCredentials.cs: линия 106 \ r \ n в Amazon.Runtime.Internal.CredentialsRetriever.InvokeAsync [Т] (IExecutionContext выполнениеContext) в D: \ JenkinsWorkspaces \ требюш СЦЕНА-релиз \ AWSDotNetPublic \ SDK \ SRC \ Основные \ Amazon.Runtime \ Трубопроводная \ Хендлеры \ CredentialsRetriever.cs: линия 90 \ r \ n в Amazon.Runtime.Internal.RetryHandler.InvokeAsync [Т] (IExecutionContext выполнениеContext) \ r \ n в Amazon.Runtime.Internal.RetryHandler.InvokeAsync [Т] (IExecutionContext выполнениеContext) в D: \ JenkinsWorkspaces \ требюш СЦЕНА-релиз \ AWSDotNetPublic \ SDK \ SRC \ Ядро \ Amazon.Runtime \ Pipeline \ RetryHandler \ RetryHandler.cs: линия 137 \ r \ n в Amazon.Runtime.Internal.CallbackHandler.InvokeAsync [Т] (IExecutionContext выполнениеContext) \ r \ n в Amazon.Runtime.Internal.CallbackHandler.InvokeAsync [Т] (IExecutionContext выполнениеContext) \ r \ n в Amazon.Runtime.Internal.ErrorCallbackHandler.InvokeAsync [Т] (IExecutionContext выполнениеContext) \ r \ n в Amazon.Runtime.Internal.MetricsHandler.InvokeAsync [Т] (IExecutionContext выполнениеContext) \ r \ n в KaiserSmith.MS.Security.AWSCognitoAdapter.UserLogin (имя пользователя в строке, Строка пароля) в C: \ Users \ Jason \ Dropbox \ развития \ KaiserSmith.MS \ BundleShared \ Security \ AWSCognitoAdapter.cs: линия 83 "строка

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Мне удалось решить это самому. Я впервые начал изучать ошибки сети, как указал Владимир в своем ответе. Я уже исключил проблемы с брандмауэром на своем локальном компьютере, поэтому несколько часов спустя попробовал с другого компьютера и у меня возникли те же проблемы.

Я пытался поискать в Google похожие проблемы, но все безуспешно. Но после долгих расследований я в конце концов нашел причину, хотя исключение, похоже, вводит в заблуждение. Во время поиска в Google я наткнулся на другие примеры, которые инициировали клиента по-другому, поэтому я попробовал это и бинго!

Итак, я изменил это:

this.SecClient = new AmazonCognitoIdentityProviderClient(Amazon.RegionEndpoint.EUCentral1);

Чтобы стать этим

this.SecClient = new AmazonCognitoIdentityProviderClient(myAwsAccesskey, myAwsSecret,  Amazon.RegionEndpoint.EUCentral1);

И это, похоже, решило проблему!

0 голосов
/ 11 мая 2019

Давайте пройдемся по трассировке стека и связанному с ним исходному коду:

System.Net.Http.HttpClient.HandleFinishSendAsyncError
System.Net.Http.HttpClient.FinishSendAsyncUnbuffered
..
System.Net.Http.HttpClient.GetStringAsyncCore (Task)
..
SendAsync
..
AWSSDKUtils.cs: линия 1008
Amazon.Util.EC2InstanceMetadata.GetItems
..

OperationCanceledException , генерируемое при отмене cts (CancellationTokenSource) . cts отменяется, когда HttpClient.Timeout истек или отменяет отложенный запрос .

HttpClient, инициировавший запрос , присваивает пользовательское значение HttpClient.Timeout . Время ожидания установлено на 5 секунд в Amazon.Util.EC2InstanceMetadata.GetItems .

Вывод: этот запрос не успевает выполнить в течение 5 секунд. Возможно, это временная проблема с AWS Cognito или какая-то задержка в сети.

Рекомендации:

  • если эта ошибка временная и может самокорректироваться после небольшой задержки, имеет смысл применить Polly.RetryPolicy

  • попытаться исследовать задержку сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...