fix: issue short-lived console tickets instead of JWTs in node_console MCP tool

LLM clients transcribing the console WebSocket URL into shell commands
reliably corrupted the ~200-char JWT embedded in it (dropped header
segment -> "MissingAlgorithmError: Missing 'alg' value in header" on
every connection attempt). The node_console tool now mints a short
random ticket ("gns3t_" + 16 urlsafe chars, 10 min TTL, multi-use)
stored server-side and bound to the node's console endpoints:

- new ConsoleTicketService (gns3server/services/console_tickets.py),
  in-memory store with lazy expiry sweeps
- get_current_active_user_from_websocket redeems tickets through the
  existing "token" query parameter, gated on websocket.path_params so a
  ticket only authenticates the console/ws and console/vnc routes of
  the node it was minted for; the JWT path is unchanged
- redemption reuses the existing user lookup, token_version revocation
  and is_active checks, so logging out invalidates outstanding tickets
- vnc_url no longer embeds the full session JWT
- the tool docstring now tells clients to run the returned command
  verbatim instead of reconstructing the URL
This commit is contained in:
YueGuobin committed 2026-08-29 01:00:12 +08:00
1 parent 2324dcd744
commit 6d6b5351fa
9 files changed
+431 -30

No files matched your search

+2
View File
@@ -15,5 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from .authentication import AuthService
from .console_tickets import ConsoleTicketService
auth_service = AuthService()
console_ticket_service = ConsoleTicketService()