У меня есть веб-API ASP.NET Core, который я разрабатываю локально. Он использует две разные схемы аутентификации, обе схемы носителя JWT: одна предназначена для «пользовательских» токенов (выпущенных моим собственным поставщиком удостоверений), а другая — для «служебных» токенов, выданных моим клиентом Azure. Я добавлю ниже код, чтобы показать настройку этих схем, но я не делаю ничего необычного.
Совсем недавно я обнаружил, что мои защищенные конечные точки внезапно стали работать очень медленно. отвечать в моей локальной среде разработки — время отклика порядка 60 секунд. Я обнаружил, что это справедливо только для конечных точек, которым требуются токены службы. Например, конечная точка, которая принимает токены пользователя или службы и вызывается с помощью токена пользователя, нормально реагирует, когда требование токена службы удаляется.
Кроме того, если я поставлю точку останова в какое-то промежуточное программное обеспечение, которое запускается до аутентификации, затем эта точка останова достигается быстро, а затем огромная задержка до достижения точки останова в самом контроллере.
Итак, я пришел к выводу, что что-то внутри промежуточного программного обеспечения аутентификации носителя JWT вызывает приложение зависает. Но я понятия не имею, что это может быть. Я пробовал использовать Fiddler для проверки внутреннего сетевого трафика, создаваемого моим приложением (netsh winhttp set proxy 127.0.0.1:8888), но там нет ничего особенно долгосрочного. Ниже приведен след. Здесь выделяется одна вещь: отсутствие каких-либо запросов к известному документу обнаружения клиента Azure. Первые два запроса относятся к моему собственному документу обнаружения токенов пользователей. Все остальное, похоже, связано с App Insights.
# Result Protocol Host URL Body Caching Content-Type Process Comments Custom
12 200 HTTPS my.identity.local:44119 /.well-known/openid-configuration 2,104 application/json; charset=UTF-8 identity.app:800
13 200 HTTPS my.identity.local:44119 /.well-known/openid-configuration/jwks 463 application/json; charset=UTF-8 identity.app:800
17 200 HTTP www.msftconnecttest.com /connecttest.txt 22 max-age=30, must-revalidate text/plain svchost:3132
18 502 HTTP ipv6.msftconnecttest.com /connecttest.txt 512 no-cache, must-revalidate text/html; charset=UTF-8 svchost:3132
24 200 HTTPS fe2cr.update.microsoft.com /v6/ClientWebService/client.asmx 2,155 private text/xml; charset=utf-8 svchost:8068
34 502 HTTP ipv6.msftconnecttest.com /connecttest.txt 512 no-cache, must-revalidate text/html; charset=UTF-8 svchost:3132
35 200 HTTP www.msftconnecttest.com /connecttest.txt 22 max-age=30, must-revalidate text/plain svchost:3132
47 200 HTTPS fe2cr.update.microsoft.com /v6/ClientWebService/client.asmx 2,149 private text/xml; charset=utf-8 svchost:8068
Я также пытался подключиться к событиям носителя JWT. Для схемы службы выполняются только два запроса: MessageReceived (очень быстро) и AuthenticationFailed (после длительной задержки и, как и ожидалось, поскольку используемый токен не является токеном службы), поэтому никаких подсказок здесь нет. .
Трудно поверить, что такая огромная задержка связана с процессором, но я действительно не знаю, что еще я могу сделать для расследования. Кто-нибудь из вас сталкивался с этим раньше? Любые советы были бы замечательными, потому что очень неприятно иметь такую безумно медленную среду разработки. Как я уже сказал, это началось только последние пару дней, и я почти не прикасался к кодовой базе API. Возможно ли, что на меня распространяется какое-то ограничение скорости Azure? У меня есть платная учетная запись Azure. Как и было обещано, вот метод расширения, который я использую для настройки этой схемы аутентификации:
private static void AddServiceTokenAuthenticationIfRequired(this AuthenticationBuilder authBuilder, IServiceCollection services, AuthenticationSettings settings)
{
if (!settings.SupportServiceTokens)
{
return;
}
services.AddSingleton();
var tenantId = settings.TenantId ?? throw new Exception("Token tenant not configured");
var authority = $"https://sts.windows.net/{tenantId}";
var audience = settings.DefaultTokenAudience ?? throw new Exception("Token audience not configured");
authBuilder.AddJwtBearer(AuthenticationSchemes.Service, options =>
{
options.Audience = audience;
options.Authority = new Uri(authority).AbsoluteUri;
options.TokenValidationParameters.NameClaimType = JwtClaimTypes.Subject;
options.TokenValidationParameters.ValidateIssuer = true;
options.TokenValidationParameters.ValidIssuers = [$"{authority}/"];
options.TokenValidationParameters.ValidateAudience = true;
options.TokenValidationParameters.ValidateIssuerSigningKey = true;
options.TokenValidationParameters.ValidateLifetime = true;
options.TokenValidationParameters.LogValidationExceptions = true;
options.EventsType = typeof(CustomServiceAuthenticationEvents);
options.MapInboundClaims = false;
});
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... ment-envir
Промежуточное программное обеспечение аутентификации Microsoft внезапно стало чрезвычайно медленным в среде разработки ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение