#OpenClaw "device signature expired" (1008) - Need Help

1 messages · Page 1 of 1 (latest)

digital mantle
#

Problem
The OpenClaw dashboard (web UI at localhost:18789) fails to connect to the gateway with error:
disconnected (1008): device signature expired
The gateway itself is healthy - CLI commands work fine, Telegram integration is connected, openclaw gateway health returns OK. Only the browser dashboard fails to authenticate.
Environment

OpenClaw 2026.2.15 (3fe22ea)
Running in WSL (Ubuntu) on Windows
Gateway bound to loopback (127.0.0.1:18789)
Auth mode: token

What I've Tried
Verified system time is correct - not a clock skew issue
Checked gateway health - all OK:

openclaw gateway status # running, RPC probe OK
openclaw gateway health # OK, Telegram connected
openclaw doctor # no critical issues

Ran gateway in verbose mode - confirmed Chrome browser connections are being rejected with code 1008 "device signature expired"
Cleared sessions:

openclaw sessions clear
openclaw gateway restart

Regenerated gateway token:

openclaw doctor --generate-gateway-token

Removed stale UI device from paired.json - manually edited ~/.openclaw/devices/paired.json to remove the openclaw-control-ui device entry
Cleared browser local storage for localhost:18789
Ran openclaw dashboard to get fresh authenticated URL

None of these resolved the issue - browser still gets "device signature expired" on every connection attempt.
Relevant Files

~/.openclaw/devices/paired.json - now contains only CLI device
~/.openclaw/identity/device.json - gateway keypair looks intact
~/.openclaw/openclaw.json - main config

Any suggestions appreciated!

gleaming jacinthBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

frigid irisBOT
#

That close reason is very specific: the Gateway is rejecting the Control UI’s device identity signature timestamp.

In code it’s literally:

  • signedAt is generated in the browser as Date.now()
  • the Gateway rejects if Math.abs(Date.now() - signedAt) > 10 * 60 * 1000 (10 minutes)

So this basically only happens when Windows/Chrome time and WSL time disagree by >10 minutes (classic after sleep/hibernate; WSL2 clock drift is a known annoyance).

1) Confirm the skew (epoch ms, not “human time”)

Run these and compare:

In WSL:

date +%s%3N
node -p "Date.now()"
#

In Chrome devtools console (on the dashboard page):

Date.now()

If the WSL value and Chrome value differ by > 600000, that’s your smoking gun.

2) Fix (WSL time resync)

The quickest fix is usually:

  • From Windows: wsl --shutdown
  • Re-open your WSL distro
  • openclaw gateway restart
  • Reload the dashboard (incognito is fine)

3) Break-glass workaround (if you need UI now)

You can temporarily bypass device identity checks:

#

gateway.controlUi.dangerouslyDisableDeviceAuth: true

This is intentionally labeled dangerous (it disables the device-identity security layer), so only do it for local-only debugging and revert once your clock is sane again.

Docs:

If you paste the three timestamps above (WSL date +%s%3N, WSL node -p Date.now(), Chrome Date.now()), I can tell you immediately which side is drifting.

digital mantle
digital mantle
#

Number 1 and 2 worked!!. I now have a functioning dashboard. Thanks for the help!