微软身份验证中间件在开发环境中突然变得极其缓慢

问题描述 投票:0回答:1

我有一个正在本地开发的 ASP.NET Core Web API。它使用两种不同的身份验证方案,两种都是 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
(在长时间延迟之后,正如预期的那样,因为所使用的令牌不是服务令牌),因此没有任何线索。

很难相信如此巨大的延迟是受CPU限制的,但我真的不知道我还能做些什么来调查。你们以前遇到过这种情况吗?任何提示都会令人惊奇,因为拥有如此缓慢的开发环境真是令人沮丧。就像我说的,这只是最近几天才开始的,我几乎没有接触过 API 代码库。我是否可能受到某种 Azure 速率限制?我有一个付费 Azure 帐户。正如所承诺的,这是我用来设置此身份验证方案的扩展方法:

private static void AddServiceTokenAuthenticationIfRequired(this AuthenticationBuilder authBuilder, IServiceCollection services, AuthenticationSettings settings)
{
    if (!settings.SupportServiceTokens)
    {
        return;
    }

    services.AddSingleton<CustomServiceAuthenticationEvents>();

    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;
    });
}
c# azure authentication asp.net-core-webapi identitymodel
1个回答
0
投票

好吧,在我用头撞墙 24 小时后,我发现我的开发笔记本电脑和 Microsoft 之间的巨大延迟是由我安装的 Cloudflare WARP 应用程序 造成的,据说是为了加快我的互联网速度。我无法解释它,但这个应用程序过去曾给我带来其他网络不稳定的问题,所以我只是卸载它。顺便说一句,禁用/卸载修复了该问题,该问题适用于我的计算机和 Azure 资源之间的所有通信,而不仅仅是身份验证支持资源。

© www.soinside.com 2019 - 2024. All rights reserved.