Intercepteurs gRPC et métadonnées
Authentification, intergiciel de journalisation et métadonnées gRPC
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
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
- Protocol Buffers et fichiers .proto
- Implémenter un service gRPC unaire
- Flux côté serveur et côté client
- Intercepteurs gRPC et métadonnées