OperationCanceledException при попытке аутентификации пользователя в AWS Cognito

Я играю с 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(Exception e, CancellationTokenSource cts)\r\n at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)\r\n at System.Net.Http.HttpClient.GetStringAsyncCore(Task1 getTask)\r\n at Amazon.Runtime.Internal.Util.AsyncHelpers.<>c__DisplayClass1_11.<<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](Func1 task) in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Internal\Util\_mobile\AsyncHelpers.cs:line 87\r\n at Amazon.Util.AWSSDKUtils.DownloadStringContent(Uri uri, TimeSpan timeout, IWebProxy proxy) in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Util\AWSSDKUtils.cs:line 1008\r\n at Amazon.Util.EC2InstanceMetadata.GetItems(String relativeOrAbsolutePath, Int32 tries, Boolean slurp) in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Util\_bcl+netstandard\EC2InstanceMetadata.cs:line 513\r\n at Amazon.Util.EC2InstanceMetadata.get_IAMSecurityCredentials() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Util\_bcl+netstandard\EC2InstanceMetadata.cs:line 311\r\n at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.FetchCredentials() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Credentials\_bcl+netstandard\DefaultInstanceProfileAWSCredentials.cs:line 142\r\n at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.GetCredentials() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Credentials\_bcl+netstandard\DefaultInstanceProfileAWSCredentials.cs:line 88\r\n at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.GetCredentialsAsync() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Credentials\_bcl+netstandard\DefaultInstanceProfileAWSCredentials.cs:line 106\r\n at Amazon.Runtime.Internal.CredentialsRetriever.InvokeAsync[T](IExecutionContext executionContext) in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\Handlers\CredentialsRetriever.cs:line 90\r\n at Amazon.Runtime.Internal.RetryHandler.InvokeAsync[T](IExecutionContext executionContext)\r\n at Amazon.Runtime.Internal.RetryHandler.InvokeAsync[T](IExecutionContext executionContext) in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\RetryHandler\RetryHandler.cs:line 137\r\n at Amazon.Runtime.Internal.CallbackHandler.InvokeAsync[T](IExecutionContext executionContext)\r\n at Amazon.Runtime.Internal.CallbackHandler.InvokeAsync[T](IExecutionContext executionContext)\r\n at Amazon.Runtime.Internal.ErrorCallbackHandler.InvokeAsync[T](IExecutionContext executionContext)\r\n at Amazon.Runtime.Internal.MetricsHandler.InvokeAsync[T](IExecutionContext executionContext)\r\n at KaiserSmith.MS.Security.AWSCognitoAdapter.UserLogin(String username, String password) in C:\Users\Jason\Dropbox\Development\KaiserSmith.MS\BundleShared\Security\AWSCognitoAdapter.cs:line 83" string

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 063
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

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

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

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

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

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

Ответ принят как подходящий

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

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

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

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

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

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

И это, кажется, решило проблему!

В моем случае клиент .NET Cognito выдавал исключение OperationCancelledException или SocketException (хост не работает).

Поскольку вы не предоставили какие-либо учетные данные AWS конструктору AmazonCognitoIdentityProviderClient, он попытался отправить HTTP-запрос к http://169.254.169.254 для получения метаданных экземпляра EC2 (в конечном итоге пытаясь получить профиль экземпляра EC2 или аналогичную роль IAM, которую он должен принять).

Решение состоит в том, чтобы предоставить конструктору недопустимые учетные данные AWS. новый AmazonCognitoIdentityProviderClient(новый Amazon.Runtime.BasicAWSCredentials(@"Invalid", @"Credentials"))

Исключение сокета: хост не работает, когда 169.254.169.254 был направлен из моего интерфейса Ethernet, и не удалось получить ответ ARP.

Другие вопросы по теме