package grpc_auth_test import ( "context" "github.com/grpc-ecosystem/go-grpc-middleware/auth" "github.com/grpc-ecosystem/go-grpc-middleware/tags" "google.golang.org/grpc" "google.golang.org/grpc/codes" ) var ( cc *grpc.ClientConn ) func parseToken(token string) (struct{}, error) { return struct{}{}, nil } func userClaimFromToken(struct{}) string { return "foobar" } // Simple example of server initialization code. func Example_serverConfig() { exampleAuthFunc := func(ctx context.Context) (context.Context, error) { token, err := grpc_auth.AuthFromMD(ctx, "bearer") if err != nil { return nil, err } tokenInfo, err := parseToken(token) if err != nil { return nil, grpc.Errorf(codes.Unauthenticated, "invalid auth token: %v", err) } grpc_ctxtags.Extract(ctx).Set("auth.sub", userClaimFromToken(tokenInfo)) newCtx := context.WithValue(ctx, "tokenInfo", tokenInfo) return newCtx, nil } _ = grpc.NewServer( grpc.StreamInterceptor(grpc_auth.StreamServerInterceptor(exampleAuthFunc)), grpc.UnaryInterceptor(grpc_auth.UnaryServerInterceptor(exampleAuthFunc)), ) }