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

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

2025-06-12 18:07:32作者:羿妍玫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 网关层。

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

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
165
2.05 K
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
85
562
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
60
17
apintoapinto
基于golang开发的网关。具有各种插件,可以自行扩展,即插即用。此外,它可以快速帮助企业管理API服务,提高API服务的稳定性和安全性。
Go
22
0
cjoycjoy
一个高性能、可扩展、轻量、省心的仓颉应用开发框架。IoC,Rest,宏路由,Json,中间件,参数绑定与校验,文件上传下载,OAuth2,MCP......
Cangjie
94
15
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
199
279
giteagitea
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
17
0
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
954
564