欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

gRPC 安全实践:mTLS 之外的服务端鉴权与消息级签名

发表于:|最后更新:|分类:网络架构与安全|阅读:951 次

mTLS 仅证明“谁在连接”,无法约束“能调用哪些方法”。在 gRPC 中应结合 Interceptor 做方法级 RBAC,并对关键消息体施加签名防止中间人篡改。

gRPC 通信架构

一、Go 服务端方法级鉴权拦截器

go
func AuthInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
    md, ok := metadata.FromIncomingContext(ctx)
    if !ok {
        return nil, status.Error(codes.Unauthenticated, "missing metadata")
    }
    roles := md.Get("x-role")
    if !allowed(info.FullMethod, roles) {
        return nil, status.Error(codes.PermissionDenied, "method not allowed")
    }
    return handler(ctx, req)
}