diff --git a/backend/open_webui/routers/configs.py b/backend/open_webui/routers/configs.py index 758d5ffbb4..d86277c31e 100644 --- a/backend/open_webui/routers/configs.py +++ b/backend/open_webui/routers/configs.py @@ -217,6 +217,7 @@ class ToolServerConnection(BaseModel): path: str type: str | None = 'openapi' # openapi, mcp auth_type: str | None + forward_cookies: bool = False headers: dict | str | None = None key: str | None config: dict | None @@ -306,6 +307,7 @@ class TerminalServerConnection(BaseModel): key: str | None = '' auth_type: str | None = 'bearer' + forward_cookies: bool = False config: dict | None = None diff --git a/backend/open_webui/routers/openai.py b/backend/open_webui/routers/openai.py index 7e25b30f70..925e6d41ec 100644 --- a/backend/open_webui/routers/openai.py +++ b/backend/open_webui/routers/openai.py @@ -159,7 +159,7 @@ async def get_headers_and_cookies( metadata: dict | None = None, user: UserModel = None, ): - cookies = {} + cookies = getattr(request, 'cookies', {}) if config.get('forward_cookies', False) else {} headers = { 'Content-Type': 'application/json', **( @@ -189,11 +189,8 @@ async def get_headers_and_cookies( elif auth_type == 'none': token = None elif auth_type == 'session': - cookies = request.cookies token = request.state.token.credentials elif auth_type == 'system_oauth': - cookies = request.cookies - oauth_token = None try: if request.cookies.get('oauth_session_id', None): diff --git a/backend/open_webui/routers/terminals.py b/backend/open_webui/routers/terminals.py index 1ce815905a..6a428bfcb4 100644 --- a/backend/open_webui/routers/terminals.py +++ b/backend/open_webui/routers/terminals.py @@ -145,16 +145,14 @@ async def proxy_terminal( return JSONResponse({'error': 'A saved chat is required for this terminal'}, status_code=409) if context_id: headers[TERMINAL_CONTEXT_HEADER] = context_id - cookies = {} + cookies = getattr(request, 'cookies', {}) if connection.get('forward_cookies', False) else {} auth_type = connection.get('auth_type', 'bearer') if auth_type == 'bearer': headers.update(bearer_auth_header(connection.get('key', ''))) elif auth_type == 'session': - cookies = request.cookies headers.update(bearer_auth_header(request.state.token.credentials)) elif auth_type == 'system_oauth': - cookies = request.cookies # Resolve the token server-side from the caller's OAuth session; never trust a client header. oauth_token = None try: