视频加载失败

微服务鉴权与网关职责

386 字
2 分钟
微服务鉴权与网关职责

微服务鉴权与网关职责#

核心结论#

  • Gateway 负责 Authentication(你是谁)
  • Microservice 负责 Authorization(你能干什么)

Gateway 应该做什么#

  • 验证登录态:JWT / OAuth2 / Session / API Key
  • 提取并传递身份上下文:x-user-id、x-user-role、x-tenant-id
  • 公共安全能力:限流、黑名单、IP 风控、CORS、TLS、WAF、审计日志、Tracing

Service 必须做什么#

  • 校验资源归属(是否本人数据)
  • 校验角色权限(RBAC)
  • 校验属性条件(ABAC,可选)
  • 校验租户边界(tenant)

反例#

只在 Gateway 校验 JWT,service 完全信任 header。

风险:

  • 内网横向攻击
  • 内部请求伪造
  • SSRF 间接越权
  • 资源 ID 枚举导致越权操作

gRPC 透传身份(Go)#

md := metadata.Pairs(
"x-user-id", "123",
"x-user-role", "user",
)
ctx := metadata.NewOutgoingContext(ctx, md)
// server side
md, _ = metadata.FromIncomingContext(ctx)
uid := md.Get("x-user-id")
role := md.Get("x-user-role")

说明:

  • metadata 适合内部身份上下文透传
  • 不能只“读到 uid 就执行业务”,必须继续做业务授权校验

更成熟的内部安全#

  • 内部签名头(例如:x-auth-signature + x-request-ts)防伪造
  • Service Mesh(Istio/Linkerd)做服务间 mTLS 身份认证

文件服务场景落地#

外部:HTTP/JSON -> Gateway
内部:Gateway -> gRPC filesystem-service

filesystem-service 关注:

  • 元数据、分片、hash、配额、权限
  • 对象存储交互
  • presigned URL 签发

大文件推荐:

  • Gateway 只签发 URL
  • 客户端直传对象存储(S3/OSS/MinIO)

快速检查清单#

  • 是否明确区分认证与授权
  • service 是否做了资源归属校验
  • 是否有 role/tenant 维度校验
  • 是否限制了内部伪造请求风险
  • 上传链路是否避免 Gateway 传大文件

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

微服务鉴权与网关职责
https://blog.81vm3.xyz/posts/gateway-auth/
作者
Blume
发布于
2026-01-27
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Blume
I build interesting things.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
38
分类
5
标签
98
总字数
23,078
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录