mTLS 仅证明“谁在连接”,无法约束“能调用哪些方法”。在 gRPC 中应结合 Interceptor 做方法级 RBAC,并对关键消息体施加签名防止中间人篡改。
![]()
一、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)
}