Skip to content

v0.0.1 - Initial gRPC Authentication Proxy

Choose a tag to compare

@chalabi2 chalabi2 released this 19 Aug 03:32
· 11 commits to main since this release
1bd57eb

Release v0.0.1

Initial Release

This is the first release of the gRPC Authentication Proxy, a simple Go-based proxy that adds JWT authentication headers to gRPC requests.

Features

  • ✅ JWT Header Injection: Automatically adds Authorization: Bearer <token> headers to all gRPC requests
  • ✅ Multi-Endpoint Support: Configure multiple endpoints in a single YAML file
  • ✅ gRPC Reflection: Full support for gRPC reflection and service discovery
  • ✅ Streaming Support: Preserves all gRPC semantics including bidirectional streaming
  • ✅ Perfect Trailer Handling: Native Go gRPC support ensures proper trailer forwarding
  • ✅ Easy Configuration: Simple YAML configuration with automatic validation

Use Cases

  • Hermes Relayer: Add authentication to gRPC endpoints that Hermes cannot authenticate with
  • gRPC Tools: Use with grpcurl, buf, or any gRPC client that needs authentication
  • Development: Test authenticated gRPC services locally without modifying client code

Quick Start

# Download and extract the binary
wget https://github.com/chalabi2/chandra-grpc-proxy/releases/download/v0.0.1/grpc-auth-proxy-linux-amd64
chmod +x grpc-auth-proxy-linux-amd64

# Or build from source
git clone https://github.com/chalabi2/chandra-grpc-proxy.git
cd chandra-grpc-proxy
make build

# Configure
cp config.example.yaml config.yaml
# Edit config.yaml with your JWT tokens

# Run
make run

Configuration Example

endpoints:
  - name: "cosmos-hub"
    local_port: 9090
    remote_address: "cosmos-grpc-api.chandrastation.com:443"
    use_tls: true
    jwt_token: "your_jwt_token_here"

Testing

# Test reflection
grpcurl -plaintext localhost:9090 list

# Test actual calls
grpcurl -plaintext -d '{}' localhost:9090 cosmos.base.tendermint.v1beta1.Service/GetNodeInfo

Technical Details

  • Language: Go 1.21+
  • Dependencies: Minimal (gRPC, YAML parser, testify for tests)
  • Architecture: Transparent proxy using gRPC's UnknownServiceHandler
  • Performance: Low latency, handles concurrent connections efficiently
  • Security: JWT tokens stored in gitignored config file

What's Fixed

This release solves the gRPC trailer handling issues that were present in earlier Rust implementations, providing a stable and reliable proxy for production use.

Known Issues

None at this time.