Azure App Insights出现大量可恢复JWT认证异常,如何修复或屏蔽?
AAI异常上报逻辑说明
Application Insights 并不是仅捕获全局未处理异常,它默认会采集所有通过ILogger输出的Error及以上级别的日志,包括中间件内部捕获但主动写入日志的异常。
你定位的JwtBearerHandler代码中,单个JWT认证方案校验失败时,会直接调用LogError输出异常日志,哪怕后续其他认证方案校验成功、请求最终返回2xx状态码,这条异常日志已经被AAI的日志采集器捕获并上报,这就是你遇到大量假阳性异常的核心原因。
解决方案
方案1:从根源消除冗余异常日志(推荐)
当前你在授权策略中配置了两个认证方案,请求会依次尝试两个方案校验,前一个方案校验失败的异常会被默认写入日志。你可以修改JWT认证配置,关闭单个方案校验失败时的错误日志输出:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(Configuration, jwtBearerOptions => { jwtBearerOptions.Events = new JwtBearerEvents { OnAuthenticationFailed = context => { // 仅当最终要返回401时才保留异常,否则跳过日志输出 context.NoResult(); return Task.CompletedTask; } }; });
你可以对OpenIddict的认证配置做相同处理,避免单个校验流程失败输出冗余错误日志。
另外开发环境使用临时密钥导致重启后密钥变更,也会放大这类异常的出现频率,生产环境建议将OpenIddict的临时加密/签名密钥替换为持久化证书,从根源减少这类异常的产生。
方案2:AAI侧过滤指定异常(临时兼容方案)
如果不想修改认证流程的配置,也可以通过AAI的遥测处理器直接过滤掉这类假阳性异常的上报:
首先实现自定义遥测处理器:
using Microsoft.ApplicationInsights.Channel; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.Extensibility; using Microsoft.IdentityModel.Tokens; public class IgnoreJwtValidationExceptionProcessor : ITelemetryProcessor { private readonly ITelemetryProcessor _next; public IgnoreJwtValidationExceptionProcessor(ITelemetryProcessor next) { _next = next; } public void Process(ITelemetry item) { // 匹配到JWT校验异常直接跳过不上报 if (item is ExceptionTelemetry exTelemetry && exTelemetry.Exception is SecurityTokenUnableToValidateException) { return; } _next.Process(item); } }
然后在服务配置中注册该处理器:
services.AddApplicationInsightsTelemetryProcessor<IgnoreJwtValidationExceptionProcessor>();
内容的提问来源于stack exchange,提问作者usr-local-ΕΨΗΕΛΩΝ
相关产品推荐
相关产品推荐

