Как исправить «Операция была отменена» в AspNetCore.Authentication.JwtBearer? - PullRequest
0 голосов
/ 11 июля 2019

Я использую Microsoft.AspNetCore.Authentication.JwtBearer, версия = 2.1.2.0 для проверки подлинности запроса в приложении asp.net core 2.1. Приложение развернуто на кластере Kubernetes в образах Linux Docker. Сервер аутентификации находится за пределами кластера.

Иногда (редко), когда пакету JwtBearer необходимо обновить аутентичную конфигурацию с аутентификацией, возникает исключение OperationCanceledException. Показано исключение, которое не может получить блокировку из класса SemaphoreSlim.

Как мы можем избежать этой проблемы?

Трассировка стека ошибок:

fail: Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HLNVLH85GSDG", Request id "0HLNVLH85GSDG:00000002": An unhandled exception was thrown by the application.
System.OperationCanceledException: The operation was canceled.
   at System.Threading.CancellationToken.ThrowOperationCanceledException()
   at System.Threading.SemaphoreSlim.WaitUntilCountOrTimeoutAsync(TaskNode asyncWaiter, Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
   at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.Invoke(HttpContext context)
   at CorrelationId.CorrelationIdMiddleware.Invoke(HttpContext context, ICorrelationContextFactory correlationContextFactory)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)

Конфигурация JwtBearer

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

            }).AddJwtBearer(options =>
            {
                options.Authority = domain;
                options.Audience = audience;
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...