Overview
Gateway proxy endpoints forward signed HTTP requests to configured upstream services after validating:- RFC 9421 signature verification
- Nonce replay protection
- Approved claim validation
- Connection configuration and secrets
Proxy Request Flow
Generic Proxy Endpoint
Connection identifier configured in Gateway (e.g.,
slack-proxy, linear-api)Upstream path to forward (e.g.,
chat.postMessage, api/v1/issues)Required Headers
All proxy requests require Sigilum signature headers:RFC 9421 Signature-Input headerExample:
sig1=("@method" "@path" "@authority" "content-digest" "sigilum-namespace" "sigilum-subject" "sigilum-agent-key" "sigilum-nonce");created=1709550000;keyid="key-abc123";nonce="nonce_xyz789"RFC 9421 Signature header with base64-encoded signatureExample:
sig1=:MEUCIA...:==Sigilum namespace identifier
Stable requester identifier within namespace (user ID, employee ID, or app principal)
Base64-encoded public key of signing agent
Agent certificate for signature verification
Signed Component Requirements
Thesignature-input header must include these components:
@method- HTTP method@path- Request path@authority- Host authoritycontent-digest- SHA-256 digest of request body (if body present)sigilum-namespacesigilum-subjectsigilum-agent-keysigilum-nonce- Unique nonce for replay protection
created- Unix timestamp of signature creationkeyid- Key identifiernonce- Nonce value (must matchsigilum-nonceheader)
Response
Gateway forwards the upstream response body transparently
On auth failure, returns error envelope:
error(string) - Human-readable error summarycode(string) - Error code from taxonomyrequest_id(string) - Correlation IDtimestamp(string) - RFC3339 UTC timestampdocs_url(string) - Remediation reference URL
Example: Slack Message
- Verifies signature with
sigilum-agent-key - Checks
nonce_xyznot seen before foracme-corpnamespace - Validates
(acme-corp, MFkwEwYHK..., slack-proxy)approved claim exists - Resolves
slack-proxyconnection config and decrypts secret - Strips all
sigilum-*,signature*,content-digestheaders - Injects
Authorization: Bearer xoxb-...header - Forwards to
https://slack.com/api/chat.postMessage
Example: Auth Failure
Slack Alias Endpoint
Slack API path (e.g.,
chat.postMessage, users.list)The
/slack/* route is hardcoded to connection ID slack-proxy. This alias cannot be changed via environment variables.Example: Slack Alias
Auth Modes
Gateway supports three credential injection modes when forwarding to upstream:Bearer Token (auth_mode: "bearer")
Injects Authorization header with Bearer token:
Header Key (auth_mode: "header_key")
Injects custom header with secret:
Query Parameter (auth_mode: "query_param")
Appends secret to query string:
Shared Credential Variables
Gateway supports reusable credential variables referenced across multiple connections: Define Shared Variable:{{OPENAI_API_KEY}} at runtime from shared variables store.
Unsigned Proxy Mode (Development)
For local development, Gateway can bypass signature verification for specific connections: Configuration:Error Scenarios
Missing Required Headers
Request:Invalid Signature
Response (403 Forbidden):Claim Not Approved
Response (403 Forbidden):Connection Not Found
Response (404 Not Found):Upstream Timeout
Response (504 Gateway Timeout):Rotation Enforcement
Gateway can enforce credential rotation policies:block mode, overdue connections return:
Response (403 Forbidden):
Decision Logging
WhenGATEWAY_LOG_PROXY_REQUESTS=true, Gateway emits structured JSON decision logs:
Gateway automatically redacts secret-bearing fields, hashes identity fields, and masks client IPs before logging.
Next Steps
MCP Runtime
Explore MCP tool discovery and execution
Admin Endpoints
Manage connections and credentials