0Pricing
gRPC & High Performance APIs · Lección

Interceptores para la seguridad

Utilice interceptores de gRPC para centralizar aspectos de seguridad como la autenticación y el registro en todos los servicios.

Interceptores para la seguridad es una lección gratuita de gRPC & High Performance APIs en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de gRPC & High Performance APIs, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de gRPC & High Performance APIs incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

Intro to gRPC Interceptors

Interceptors are a powerful feature in gRPC, acting like middleware that can inspect and modify requests and responses. They allow you to centralize common logic that applies to multiple service calls.

Think of them as gates or checkpoints your requests pass through.

Why Use Interceptors?

Interceptors are perfect for handling cross-cutting concerns. Instead of repeating code in every service method, you can manage things like:

  • Authentication
  • Authorization
  • Logging & Monitoring
  • Request validation

This keeps your core service logic clean and focused.

Server Interceptors

A server interceptor sits between the gRPC server and your actual service implementation. It runs logic before your service method is called, allowing you to:

  • Validate incoming requests
  • Check authentication tokens
  • Add request context

Client Interceptors

A client interceptor operates on the client side, executing logic before a request is sent to the server. This is useful for:

  • Adding authentication tokens to outgoing requests
  • Injecting tracing headers
  • Implementing retry logic
  • Modifying request metadata

Server Interceptor Structure

On the server, an interceptor wraps the ServerCallHandler. It receives the ServerCall and Metadata, and can decide to proceed with the call or terminate it. Here's a conceptual view:

class AuthInterceptor implements ServerInterceptor {
  public <ReqT, RespT> ServerCall.Listener<ReqT>
      interceptCall(ServerCall<ReqT, RespT> call,
                    Metadata headers,
                    ServerCallHandler next) {
    // Check headers for auth token
    if (isValid(headers)) {
      return next.startCall(call, headers);
    } else {
      call.close(Status.UNAUTHENTICATED, headers);
      return new ServerCall.Listener<ReqT>() {}; // Block call
    }
  }
}

Client Interceptor Structure

On the client, an interceptor typically implements ClientInterceptor. It allows you to modify the CallOptions or Metadata before the actual RPC call is made.

class ApiKeyInterceptor implements ClientInterceptor {
  public <ReqT, RespT> ClientCall<ReqT, RespT>
      interceptCall(MethodDescriptor<ReqT, RespT> method,
                    CallOptions callOptions,
                    Channel next) {
    return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(
        next.newCall(method, callOptions)) {
      @Override
      public void start(ClientCall.Listener<RespT> responseListener,
                        Metadata headers) {
        // Add API key to headers
        headers.put(API_KEY_METADATA_KEY, "my-secret-key");
        super.start(responseListener, headers);
      }
    };
  }
}

Simulated Server Auth Check

Let's simulate a server interceptor checking for an authentication token. If the token is missing or invalid, the 'request' is blocked and the service method isn't called.

public class Main {
    // Simulate an interceptor's core logic
    static void authInterceptor(String metadata, Runnable nextCall) {
        System.out.println("Interceptor: Checking metadata...");
        if (metadata != null && metadata.contains("auth_token:valid")) {
            System.out.println("Interceptor: Authentication successful!");
            nextCall.run(); // Proceed to the actual service method
        } else {
            System.out.println("Interceptor: Authentication failed! Request blocked.");
        }
    }

    // Simulate the actual service method
    static void actualServiceMethod() {
        System.out.println("Service: Request processed successfully!");
    }

    public static void main(String[] args) {
        System.out.println("--- Valid Request ---");
        authInterceptor("auth_token:valid", Main::actualServiceMethod);

        System.out.println("\n--- Invalid Request ---");
        authInterceptor("auth_token:invalid", Main::actualServiceMethod);

        System.out.println("\n--- Missing Token ---");
        authInterceptor(null, Main::actualServiceMethod);
    }
}

Simulated Client API Key

Now, let's simulate a client interceptor that automatically adds an API key to the request metadata before it's sent to the server. This ensures every call includes necessary credentials.

public class Main {
    // Simulate an interceptor that adds metadata
    static String addApiKeyInterceptor(String existingMetadata, String apiKey, String methodName) {
        System.out.println("Client Interceptor: Adding API key for " + methodName);
        return (existingMetadata != null ? existingMetadata + ", " : "") + "api_key:" + apiKey;
    }

    // Simulate sending a request
    static void sendRequest(String metadata, String methodName) {
        System.out.println("Client: Sending request to " + methodName + " with metadata: [" + metadata + "]");
        // In a real gRPC call, this metadata would be sent to the server
    }

    public static void main(String[] args) {
        String initialMetadata = "user_id:123";
        String apiKey = "my_secret_key_123";
        String targetMethod = "/MyService/SayHello";

        // Apply client interceptor
        String finalMetadata = addApiKeyInterceptor(initialMetadata, apiKey, targetMethod);

        // Send the request with enhanced metadata
        sendRequest(finalMetadata, targetMethod);
    }
}

Chaining Interceptors

You can apply multiple interceptors to a gRPC channel or server. They form a chain, executing in the order they are added. This allows for modular and layered processing of requests.

  • The first interceptor processes, then passes to the second.
  • The second processes, then passes to the service (or the next interceptor).
  • The order in which you add interceptors matters!

Interceptor Use Cases

Interceptors are highly versatile for enhancing your gRPC services. Which of these are common security-related use cases for gRPC interceptors?

Recap: Interceptors for Security

Interceptors provide a powerful, centralized way to inject logic into your gRPC request and response flow. They are invaluable for implementing security features like authentication, authorization, and auditing, keeping your service code clean and focused on business logic.

By using interceptors, you build more robust, maintainable, and secure gRPC applications.

Preguntas frecuentes

¿La lección «Interceptores para la seguridad» es gratis?

Sí — el texto completo de «Interceptores para la seguridad» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de gRPC & High Performance APIs, actualiza a CoddyKit PRO. El curso de gRPC & High Performance APIs incluye 4 lecciones en total.

¿Qué aprenderé en «Interceptores para la seguridad»?

Utilice interceptores de gRPC para centralizar aspectos de seguridad como la autenticación y el registro en todos los servicios. Practicas gRPC & High Performance APIs con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar gRPC & High Performance APIs?

No se requiere experiencia previa. gRPC & High Performance APIs en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Interceptores para la seguridad»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de gRPC & High Performance APIs?

Sí. Cada lección de gRPC & High Performance APIs incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. TLS/SSL para gRPC
  2. Autenticación y autorización
  3. Interceptores para la seguridad
  4. TLS mutuo (mTLS) para la autenticación entre servicios
← Volver a gRPC & High Performance APIs