Move 17 library crates into crates/, CLI binary into bin/fxt, consolidate 10 test crates into testing/, split config crate from deployment config files. Root directory reduced from 38+ to ~17 directories. All Cargo.toml paths and build.rs proto refs updated. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.7 KiB
4.7 KiB
JWT Token Generator - Usage Examples
Quick reference for common JWT token generation scenarios in E2E testing.
Basic Usage
Generate Default Token
./jwt_token_generator.sh
Output: Trader token with api.access permission, 1-hour expiration
Use in Curl Request
TOKEN=$(./jwt_token_generator.sh)
curl -H "Authorization: Bearer $TOKEN" http://localhost:50051/api/v1/orders
Role-Based Scenarios
Trader (Default)
./jwt_token_generator.sh
# or
./jwt_token_generator.sh trader_user trader "api.access"
Admin User
./jwt_token_generator.sh admin_user admin "api.access,system.admin,config.write"
Viewer (Read-Only)
./jwt_token_generator.sh viewer_user viewer "api.read,data.read,metrics.view"
Custom Expiration
Short-Lived (60 seconds)
./jwt_token_generator.sh test_user trader "api.access" 60
Long-Lived (24 hours)
./jwt_token_generator.sh test_user trader "api.access" 86400
Very Short (10 seconds, for expiration testing)
./jwt_token_generator.sh test_user trader "api.access" 10
Permission Combinations
Trading Permissions
./jwt_token_generator.sh trader_user trader "api.access,orders.submit,orders.cancel,positions.view"
Risk Management
./jwt_token_generator.sh risk_user risk_manager "api.access,risk.view,risk.limits,circuit.breaker"
System Administration
./jwt_token_generator.sh admin_user admin "api.access,system.admin,config.write,config.reload,users.manage"
Monitoring Only
./jwt_token_generator.sh monitor_user viewer "api.access,metrics.view,health.check,alerts.view"
Integration Test Scripts
Order Submission Test
#!/bin/bash
TOKEN=$(./jwt_token_generator.sh)
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"symbol": "BTC/USD", "quantity": 1.0, "side": "buy", "price": 50000.0}' \
http://localhost:50051/api/v1/orders
Position Query Test
#!/bin/bash
TOKEN=$(./jwt_token_generator.sh)
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:50051/api/v1/positions
Config Management Test (Admin)
#!/bin/bash
ADMIN_TOKEN=$(./jwt_token_generator.sh admin_user admin "api.access,config.write")
curl -X POST \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"key": "max_order_size", "value": "100.0"}' \
http://localhost:50051/api/v1/config
Load Testing
Generate Multiple User Tokens
#!/bin/bash
# Generate 100 unique user tokens
for i in {1..100}; do
TOKEN=$(./jwt_token_generator.sh "user_$i" trader "api.access")
echo "$TOKEN" > "tokens/token_$i.txt"
done
Parallel Requests
#!/bin/bash
# Use different tokens for concurrent requests
for i in {1..10}; do
TOKEN=$(cat "tokens/token_$i.txt")
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:50051/api/v1/orders &
done
wait
Token Expiration Testing
Test Expired Token
#!/bin/bash
# Generate 5-second token
TOKEN=$(./jwt_token_generator.sh test_user trader "api.access" 5)
# Use immediately (should succeed)
curl -H "Authorization: Bearer $TOKEN" http://localhost:50051/api/v1/orders
echo "First request: OK"
# Wait for expiration
sleep 6
# Use again (should fail with 401)
curl -H "Authorization: Bearer $TOKEN" http://localhost:50051/api/v1/orders
echo "Second request: Should fail with 401"
Test Token Refresh
#!/bin/bash
# Old token (about to expire)
OLD_TOKEN=$(./jwt_token_generator.sh user1 trader "api.access" 10)
# New token (fresh)
NEW_TOKEN=$(./jwt_token_generator.sh user1 trader "api.access" 3600)
# Use old token
curl -H "Authorization: Bearer $OLD_TOKEN" http://localhost:50051/api/v1/orders
# Wait for old token to expire
sleep 11
# Use new token (should work)
curl -H "Authorization: Bearer $NEW_TOKEN" http://localhost:50051/api/v1/orders
Environment Variable Configuration
Production Secret
export JWT_SECRET="your-production-secret-key-here-must-be-long-enough-for-security"
TOKEN=$(./jwt_token_generator.sh)
Multiple Environments
# Development
JWT_SECRET="dev-secret-123" DEV_TOKEN=$(./jwt_token_generator.sh)
# Staging
JWT_SECRET="staging-secret-456" STAGING_TOKEN=$(./jwt_token_generator.sh)
# Production
JWT_SECRET="prod-secret-789" PROD_TOKEN=$(./jwt_token_generator.sh)
Debugging
Inspect Token Claims
TOKEN=$(./jwt_token_generator.sh)
# Decode token (requires python3 and pyjwt)
python3 <<EOF
import jwt
import json
token = "$TOKEN"
decoded = jwt.decode(token, options={"verify_signature": False})
print(json.dumps(decoded, indent=2))