Go Academy · Leçon

Intercepteurs gRPC et métadonnées

Authentification, intergiciel de journalisation et métadonnées gRPC

Leçon 4 sur 413 étapes

Intercepteurs gRPC et métadonnées est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.

Que sont les intercepteurs ?

Les intercepteurs gRPC (intergiciels) s’exécutent avant ou après les gestionnaires RPC. Ils ajoutent des fonctionnalités transversales : journalisation, validation des jetons d’authentification, métriques, récupération après une panique et traçage.

Intercepteur unaire du serveur

Un intercepteur unaire du serveur enveloppe le gestionnaire avec une logique supplémentaire :

func LoggingInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
    log.Printf("RPC: %s", info.FullMethod)
    resp, err := handler(ctx, req)
    log.Printf("done: %v", err)
    return resp, err
}

grpcSrv := grpc.NewServer(grpc.UnaryInterceptor(LoggingInterceptor))

Intercepteur de flux du serveur

Comme pour le mode unaire, mais il enveloppe le gestionnaire de flux :

func StreamLogging(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
    log.Printf("stream: %s", info.FullMethod)
    return handler(srv, ss)
}

Chaînage des intercepteurs

Utilisez grpc.ChainUnaryInterceptor (Go gRPC v1.38+) pour appliquer plusieurs intercepteurs dans l’ordre :

grpcSrv := grpc.NewServer(
    grpc.ChainUnaryInterceptor(LoggingInterceptor, AuthInterceptor, MetricsInterceptor),
)

Intercepteurs du client

Les intercepteurs unaires côté client enveloppent les appels sortants : ils sont utiles pour injecter des jetons d’authentification, effectuer des nouvelles tentatives ou ajouter des en-têtes de traçage :

conn, _ := grpc.NewClient(addr,
    grpc.WithUnaryInterceptor(ClientAuthInterceptor),
    grpc.WithTransportCredentials(insecure.NewCredentials()),
)

Métadonnées gRPC

Les métadonnées sont des paires clé-valeur envoyées avec un RPC, comparables aux en-têtes HTTP. Utilisez metadata.New et metadata.NewOutgoingContext sur le client.

md := metadata.New(map[string]string{"authorization": "Bearer " + token})
ctx := metadata.NewOutgoingContext(context.Background(), md)

Lecture des métadonnées sur le serveur

Extrayez les métadonnées entrantes avec metadata.FromIncomingContext :

md, ok := metadata.FromIncomingContext(ctx)
if !ok { return nil, status.Error(codes.Unauthenticated, "no metadata") }
token := md["authorization"]

Envoi de métadonnées par le serveur

Envoyez les en-têtes de réponse et les en-têtes de fin depuis le serveur avec grpc.SetHeader et grpc.SetTrailer :

grpc.SetHeader(ctx, metadata.Pairs("x-request-id", requestID))

go-grpc-middleware

La bibliothèque github.com/grpc-ecosystem/go-grpc-middleware/v2 fournit des intercepteurs prêts à l’emploi : récupération après une panique, journalisation (zap/logrus), authentification, et bien plus.

Modèle d’intercepteur d’authentification

Extrayez et validez un jeton dans un intercepteur ; associez l’utilisateur au contexte pour les gestionnaires en aval :

func AuthInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
    md, _ := metadata.FromIncomingContext(ctx)
    if !validateToken(md["authorization"]) {
        return nil, status.Error(codes.Unauthenticated, "invalid token")
    }
    return handler(ctx, req)
}

Intercepteur de récupération après une panique

Enveloppez les gestionnaires pour récupérer les panique et renvoyer une erreur Internal au lieu de provoquer l’arrêt du programme :

defer func() {
    if r := recover(); r != nil {
        err = status.Errorf(codes.Internal, "panic: %v", r)
    }
}()

Vérification rapide

Comment transmettez-vous les jetons d’authentification entre un client et un serveur gRPC ?

Récapitulatif : intercepteurs et métadonnées gRPC

Points clés :

  • Intercepteur unaire : func(ctx, req, info, handler) (resp, error)
  • grpc.ChainUnaryInterceptor pour plusieurs intercepteurs
  • Les métadonnées sont des paires clé-valeur ; elles sont comparables aux en-têtes HTTP
  • Intercepteur d’authentification : extraire les métadonnées → valider → ajouter l’utilisateur au contexte
Gratuit pour commencer

Apprends Go avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
51
Leçons
203

Questions Fréquemment Posées

La leçon « Intercepteurs gRPC et métadonnées » est-elle gratuite ?

Oui — le texte complet de « Intercepteurs gRPC et métadonnées » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Intercepteurs gRPC et métadonnées » ?

Authentification, intergiciel de journalisation et métadonnées gRPC Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Go Academy ?

Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Intercepteurs gRPC et métadonnées » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?

Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Protocol Buffers et fichiers .proto
  2. Implémenter un service gRPC unaire
  3. Flux côté serveur et côté client
  4. Intercepteurs gRPC et métadonnées
← Retour à Go Academy