You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Authorization Server中OAuth端点指标uri为UNKNOWN的解决方案咨询

问题描述

我在集成Spring Authorization Server、Spring Boot Actuator和Micrometer Prometheus时,发现http_server_requests_seconds_count这类指标里,合法的OAuth端点(包括无租户的/oauth/token、多租户场景的/tenant/{tenant}/oauth/token等路径)的uri字段均显示为UNKNOWN,授权服务器暴露的其他端点也有类似情况。

原因是这些OAuth端点及带租户前缀的端点未使用@RequestMapping注解,默认观测规则会将uri回退为UNKNOWN,导致监控仪表盘被污染,还破坏了基于SLO的告警机制。

我目前通过自定义ServerRequestObservationConvention解决了这个问题,代码示例如下:

@Component
public class OAuthAwareObservationConvention extends DefaultServerRequestObservationConvention {
    ...
    @Override
    public KeyValues getLowCardinalityKeyValues(ServerRequestObservationContext context) {
        String path = context.getCarrier().getServletPath();
        if (path.equals("/oauth/token") || path.equals("/tenant/{tenant}/oauth/token")) {
            context.setPathPattern("/oauth/token");
        }
        return super.getLowCardinalityKeyValues(context);
    }
}

该方案已生效,但我认为Spring Authorization Server应该提供原生支持或明确的扩展点。我的疑问是:是否存在遗漏的配置,或是有更优的解决方案?


解决方案分析

是否存在遗漏配置?

目前Spring Authorization Server本身并没有内置针对Micrometer观测的路径匹配配置,默认情况下确实不会为非@RequestMapping标注的端点生成正确的uri标签,所以不存在遗漏的开箱即用配置。

更优解决方案

  1. 优化自定义观测约定的路径匹配逻辑
    当前代码里的path.equals("/tenant/{tenant}/oauth/token")匹配逻辑存在问题——实际请求的路径是类似/tenant/foo/oauth/token,不可能直接等于带占位符的路径。可以改用Spring的路径匹配器来处理:

    @Autowired
    private PathMatcher pathMatcher;
    
    @Override
    public KeyValues getLowCardinalityKeyValues(ServerRequestObservationContext context) {
        String servletPath = context.getCarrier().getServletPath();
        // 匹配无租户的token端点
        if ("/oauth/token".equals(servletPath)) {
            context.setPathPattern("/oauth/token");
        }
        // 匹配多租户的token端点,统一为规范路径
        else if (pathMatcher.match("/tenant/*/oauth/token", servletPath)) {
            context.setPathPattern("/tenant/{tenant}/oauth/token");
        }
        // 可扩展处理其他OAuth端点,比如授权端点、令牌 introspect 等
        else if (pathMatcher.match("/oauth/authorize", servletPath)) {
            context.setPathPattern("/oauth/authorize");
        }
        return super.getLowCardinalityKeyValues(context);
    }
    

    这样能更准确匹配多租户场景下的动态路径,避免硬编码的局限性。

  2. 利用Spring Authorization Server的端点注册扩展
    Spring Authorization Server允许通过OAuth2AuthorizationServerConfigurer的endpointConfigurer自定义端点注册逻辑,你可以为这些内置OAuth端点显式添加路径元数据,让Micrometer能识别到规范路径。不过这种方式需要深入定制端点注册流程,复杂度较高,适合需要统一管理所有OAuth端点观测规则的场景。

  3. 关注官方原生支持进展
    目前Spring Authorization Server的官方讨论中已有关于Micrometer集成优化的内容,未来版本可能会原生支持为内置OAuth端点生成正确的观测标签,可关注官方仓库的更新动态。


内容的提问来源于stack exchange,提问作者Muhammad Ans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 13:52:35