fix: use X-MCP-Proxy-Auth header for proxy authentication

Changed proxy authentication to use a custom header (X-MCP-Proxy-Auth) instead of the standard Authorization header. This prevents conflicts when the proxy needs to forward the client's Authorization header to upstream MCP servers.

- Updated client to send proxy auth token in X-MCP-Proxy-Auth header
- Updated server auth middleware to check X-MCP-Proxy-Auth header
- Applies to all transport types (SSE, stdio, streamable-http)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jerome 2025-06-14 13:07:02 +01:00
commit fdae89ecbf
No known key found for this signature in database

View file

@ -138,13 +138,17 @@ const authMiddleware = (
});
};
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith("Bearer ")) {
const authHeader = req.headers["x-mcp-proxy-auth"];
const authHeaderValue = Array.isArray(authHeader)
? authHeader[0]
: authHeader;
if (!authHeaderValue || !authHeaderValue.startsWith("Bearer ")) {
sendUnauthorized();
return;
}
const providedToken = authHeader.substring(7); // Remove 'Bearer ' prefix
const providedToken = authHeaderValue.substring(7); // Remove 'Bearer ' prefix
const expectedToken = sessionToken;
// Convert to buffers for timing-safe comparison
@ -196,7 +200,9 @@ const createTransport = async (req: express.Request): Promise<Transport> => {
const headers = getHttpHeaders(req, transportType);
console.log(`SSE transport: url=${url}, headers=${Object.keys(headers)}`);
console.log(
`SSE transport: url=${url}, headers=${JSON.stringify(headers)}`,
);
const transport = new SSEClientTransport(new URL(url), {
eventSourceInit: {