[Windows][Remote Control] WebSocket auth repeatedly returns HTTP 403 after successful enrollment

Open 💬 1 comment Opened Aug 27, 2026 by krastop124-cpu
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What happened?

Remote Control cannot be enabled in the current ChatGPT/Codex Desktop Windows app. The UI reaches the final Allow devices to control this computer step, then reports:

Unable to enable remote control. Try again.

The local logs show that enrollment already exists and the client can reach the Remote Control WebSocket endpoint, but WebSocket authentication is rejected with HTTP 403 Forbidden. The client refreshes the server token and retries repeatedly, but every retry receives the same 403.

This appears distinct from the known MFA enrollment failure (#23977): in this case has_enrollment=true, and the 403 occurs during WebSocket authentication, not /server/enroll.

Environment

  • Windows 11 Pro
  • ChatGPT Desktop installed from Microsoft Store
  • App version: 26.820.71523 (2026-08-27)
  • ChatGPT Plus / Personal account
  • MFA is configured (Google Authenticator has been used for sign-in)
  • Computer Use is available and enabled when using the supported network path
  • App was reset/reinstalled and the PC/app restarted; behavior persists

Steps to reproduce

  1. Open ChatGPT Desktop on Windows.
  2. Sign in to the ChatGPT account.
  3. Open Settings → Connections → device controlling this PC / Remote Control.
  4. Choose Add device → Start.
  5. Confirm Allow devices to control this computer.
  6. Wait several seconds.
  7. UI reports that Remote Control could not be enabled.

Relevant sanitized logs

INFO  ...remote_control::websocket
connecting to app-server remote control websocket
websocket_url=wss://chatgpt.com/backend-api/wham/remote/control/server
reconnect_attempt=9
has_enrollment=true
server_id=Some("<REDACTED_SERVER_ID>")
environment_id=Some("<REDACTED_ENVIRONMENT_ID>")
app_server_client_name=Some("Codex Desktop")

WARN  ...remote_control::websocket
failed to connect to app-server remote control websocket
websocket_url=wss://chatgpt.com/backend-api/wham/remote/control/server
installation_id=<REDACTED_INSTALLATION_ID>
error=remote control websocket auth failed with HTTP 403 Forbidden; refreshing server token before reconnect
error_kind=Other
reconnect_attempt=9
has_enrollment=true
server_id=Some("<REDACTED_SERVER_ID>")
environment_id=Some("<REDACTED_ENVIRONMENT_ID>")

INFO  ...remote_control::websocket
refreshing remote control server token:
websocket_url=wss://chatgpt.com/backend-api/wham/remote/control/server
refresh_url=https://chatgpt.com/backend-api/wham/remote/control/server/refresh
account_id=<REDACTED_ACCOUNT_ID>
server_id=<REDACTED_SERVER_ID>
environment_id=<REDACTED_ENVIRONMENT_ID>

WARN  ...remote_control::websocket
failed to connect ...
error=remote control websocket auth failed with HTTP 403 Forbidden
reconnect_attempt=10
reconnect_delay=30s
has_enrollment=true

The same session can make normal authenticated Codex backend requests successfully (for example /backend-api/codex/models returns 200 OK), so general ChatGPT/Codex authentication and connectivity are working.

Important distinction

This does not look like a TCP/WebSocket routing failure: the Remote Control endpoint is reached and returns an HTTP response.

It also does not match the MFA enrollment 403 documented in #23977:

  • #23977: /remote/control/server/enroll → 403 with Multi-factor authentication required
  • This case: enrollment already exists (has_enrollment=true), then /remote/control/server WebSocket authentication → 403
  • Refreshing the Remote Control server token does not recover the connection.

Expected behavior

After successful enrollment, the refreshed server token should authenticate the Remote Control WebSocket and the PC should become available for remote control.

Actual behavior

The server token is refreshed, but WebSocket authentication continues to return HTTP 403 indefinitely.

All account IDs, installation IDs, server/environment IDs, cookies, and other identifying values above have been redacted.

View original on GitHub ↗

1 Comment

github-actions[bot] contributor · 23 hours ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #40202

Powered by Codex Action