微服务鉴权与网关职责
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 sidemd, _ = 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 传大文件
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
微服务之间如何传递 trace
后端开发跨服务传递的是 trace 上下文而非 tracer:HTTP header、gRPC metadata 与 MQ 消息头的标准做法。
2
一致性哈希:consistent 与 rendezvous 的对比
后端开发两种分布式哈希的均匀度与耗时对比结论:节点少选 rendezvous,节点多且时间敏感选 consistent。
3
Kafka 的分区与副本机制
后端开发Kafka Broker/Topic/分区的关系,以及 leader-follower 副本的读写与冗余备份机制。
4
本地负缓存
后端开发把不存在/失败的查询结果缓存在本地内存中,短时间内直接返回,避免重复打到下游系统。
5
MySQL 索引与慢查询优化
后端开发慢查询 200ms 阈值、JOIN 对数据量的影响、IN 列表过大丢索引与分批查询。
随机文章随机推荐











