首页
/ Solo.io Gloo 网关中的 HTTP 透传认证机制详解

Solo.io Gloo 网关中的 HTTP 透传认证机制详解

2025-06-12 14:02:30作者:羿妍玫Ivan

前言

在现代微服务架构中,API 网关作为系统的入口,承担着重要的安全防护职责。Solo.io Gloo 网关提供了灵活的外部认证机制,其中 HTTP 透传认证(HTTP Passthrough Auth)是一种强大的认证方式,允许开发者集成自定义的 HTTP 认证服务。本文将深入解析这一机制的原理和实现方式。

HTTP 透传认证概述

HTTP 透传认证是 Gloo 网关外部认证服务器的一种工作模式,其核心思想是将认证决策委托给开发者自己实现的 HTTP 服务。当请求到达 Gloo 网关时:

  1. 网关将请求转发给配置的外部 HTTP 认证服务
  2. 认证服务执行自定义的认证逻辑
  3. 根据认证结果决定是否允许请求继续流转

这种设计提供了极大的灵活性,开发者可以在认证服务中实现各种复杂的认证逻辑,如 JWT 验证、OAuth 2.0、自定义令牌验证等。

环境准备

在开始配置前,我们需要准备基础环境:

  1. 创建一个静态上游(Static Upstream),用于路由到目标服务
  2. 部署一个示例 HTTP 认证服务

创建上游目标

apiVersion: gloo.solo.io/v1
kind: Upstream
metadata:
  name: json-upstream
  namespace: gloo-system
spec:
  static:
    hosts:
    - addr: jsonplaceholder.typicode.com
      port: 80

部署认证服务

认证服务是一个简单的 HTTP 服务器,监听 9001 端口:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: extauth-httpservice
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: http-extauth
        image: gcr.io/solo-public/passthrough-http-service-example
        ports:
        - containerPort: 9001

同时创建对应的 Service:

apiVersion: v1
kind: Service
metadata:
  name: example-http-auth-service
spec:
  ports:
  - port: 9001
    protocol: TCP
  selector:
    app: http-extauth

配置虚拟服务

首先创建一个基础虚拟服务,不启用认证:

apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
  name: http-auth-tutorial
  namespace: gloo-system
spec:
  virtualHost:
    domains:
    - 'foo-http'
    routes:
    - matchers:
      - prefix: /
      routeAction:
        single:
          upstream:
            name: json-upstream
            namespace: gloo-system

测试请求应该能正常返回数据:

curl -H "Host: foo-http" $GATEWAY_URL/posts/1

启用 HTTP 透传认证

创建 AuthConfig 资源

apiVersion: enterprise.gloo.solo.io/v1
kind: AuthConfig
metadata:
  name: http-passthrough-auth
  namespace: gloo-system
spec:
  configs:
  - passThroughAuth:
      http:
        url: http://example-http-auth-service.default.svc.cluster.local:9001/auth
        connectionTimeout: 3s

关键参数说明:

  • url: 认证服务的端点地址
  • connectionTimeout: 连接超时时间,默认为5秒

更新虚拟服务

将 AuthConfig 应用到虚拟服务:

apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
  name: http-auth-tutorial
  namespace: gloo-system
spec:
  virtualHost:
    domains:
    - 'foo-http'
    routes:
    - matchers:
      - prefix: /
      routeAction:
        single:
          upstream:
            name: json-upstream
            namespace: gloo-system
    options:
      extauth:
        configRef:
          name: http-passthrough-auth
          namespace: gloo-system

认证流程测试

未认证请求

curl -v -H "Host: foo-http" $GATEWAY_URL/posts/1

此时请求会被拒绝,查看认证服务日志可以看到提示需要特定认证头。

认证请求

根据示例认证服务的逻辑,我们需要添加特定头:

curl -H "Host: foo-http" -H "authorization: authorize me" $GATEWAY_URL/posts/1

现在请求应该能成功通过认证。

高级配置选项

HTTP 透传认证支持丰富的配置选项,可以精细控制认证流程:

passThroughAuth:
  http:
    url: http://auth-service/auth
    request:
      # 允许传递的请求头
      allowedHeaders: ["authorization"]
      # 添加额外头
      headersToAdd:
        x-custom-header: "value"
      # 透传状态信息
      passThroughState: true
      # 透传过滤器元数据
      passThroughFilterMetadata: true
      # 透传请求体
      passThroughBody: true
    response:
      # 允许传递到上游的头
      allowedUpstreamHeaders: ["x-user-id"]
      # 认证失败时返回给客户端的头
      allowedClientHeadersOnDenied: ["x-auth-error"]
      # 从响应中读取状态
      readStateFromResponse: true

容错处理

在实际生产环境中,认证服务可能出现故障。Gloo 提供了容错机制:

passThroughAuth:
  http:
    url: http://auth-service/auth
    failureModeAllow: true

当设置为 true 时,如果认证服务返回 5XX 错误或请求超时,网关将允许请求通过。这在某些高可用性场景下非常有用,但需要谨慎评估安全影响。

监控与日志

指标监控

Gloo 提供了专门的指标来监控透传认证:

  • extauth.solo.io/http_passthrough_bypass_failure: 记录因 failure_mode_allow=true 而绕过的失败认证次数

日志查看

查看 extauth 服务的日志:

kubectl logs -n gloo-system deploy/extauth -f

成功加载配置后会看到日志:"got new config"

最佳实践

  1. 生产环境建议:使用 HTTPS 保护认证通信,配置 CA 证书
  2. 性能考虑:合理设置连接超时,避免影响系统响应时间
  3. 安全建议:谨慎使用 failureModeAllow,仅在必要时启用
  4. 头部管理:明确指定允许传递的头部,避免信息泄露

总结

HTTP 透传认证为 Gloo 网关提供了强大的扩展能力,使开发者能够灵活集成各种认证方案。通过本文的详细讲解,您应该已经掌握了如何配置和使用这一功能。在实际应用中,可以根据业务需求和安全要求,灵活调整配置参数,构建既安全又高效的 API 网关层。

登录后查看全文
热门项目推荐

项目优选

收起
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
47
253
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
347
381
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
871
516
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
179
263
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
131
184
kernelkernel
deepin linux kernel
C
22
5
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
335
1.09 K
harmony-utilsharmony-utils
harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相册、扫码、文件、日志,异常捕获、字符、字符串、数字、集合、日期、随机、base64、加密、解密、JSON等一系列的功能和操作,能够满足各种不同的开发需求。
ArkTS
31
0
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.08 K
0