Skip to content

[v13] Read the bearer token over websocket endpoints instead of query parameter#37919

Closed
lxea wants to merge 7 commits intobranch/v13from
lxea/websocket-bearer-token-v13
Closed

[v13] Read the bearer token over websocket endpoints instead of query parameter#37919
lxea wants to merge 7 commits intobranch/v13from
lxea/websocket-bearer-token-v13

Conversation

@lxea
Copy link
Copy Markdown
Contributor

@lxea lxea commented Feb 8, 2024

Backports #37520 and #37981

changelog: Removes access tokens from URL parameters, preventing them from being leaked to DNS servers, ISPs and other intermediary systems that may log them in plaintext.

Copy link
Copy Markdown
Contributor

@ibeckermayer ibeckermayer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: we forgot to update the desktop playback endpoint in the parent PR, we should refrain from cutting a release with this commit until #37981 is merged (and backported).

@lxea lxea force-pushed the lxea/websocket-bearer-token-v13 branch from 4b50ccb to 34b9ebb Compare February 9, 2024 17:20
@ibeckermayer ibeckermayer added the security Security Issues label Feb 9, 2024
@ibeckermayer ibeckermayer marked this pull request as draft February 9, 2024 19:03
zmb3 and others added 7 commits February 13, 2024 16:27
This new API can be used to play back sessions of any type.
The player accepts a session ID and a streamer, and provides
the caller with an API for playback controls (speed, play/pause,
seek, etc) as well as a channel that receives events with the
proper timing delay applied.

The design for this change is discussed in RFD 91.

Updates #10578
Updates #10579
Updates gravitational/teleport-private#665
Updates gravitational/teleport-private#1024
This makes a few changes to the player API to ensure that errors
are correctly propagated.
We use gorilla/websocket throughout the app, but desktop playback
leveraged x/net/websocket instead. Convert to gorilla so that we
are consistent and use the same library everywhere websockets are
used.
…eter (#37520)

* Read the bearer token over WS endpoints

use the request context, not session

Dont pass websocket by context

lint

resolve some comments

Add TestWSAuthenticateRequest

Close ws in handler

deprecation notices, doc

resolve comments

resolve comments

give a longer read/write deadline

dont set write deadline, ws endpoints never did before and it breaks things

convert frontend to use ws access token

Resolove comments, move to using an explicit state

fix ci

reset read deadline

prettier

* update connectToHost

* linter

* read errors from websocket

* missing /ws on ttyWsAddr and fix wrong onmessage

* fix race in test

* lint

* skip TestTerminal as it takes 11 seconds to run

* dont skip the test

* resolve apiserver comments

* Add an AuthenticatedWebSocket class

* convert other clients to use AuthenticatedWebSocket

* Converts `AuthenticatedWebSocket` into drop-in replacement for `WebSocket` (#37699)

* Converts `AuthenticatedWebSocket` into drop-in replacement for `WebSocket`
that automatically goes through Teleport's custom authentication process
before facilitating any caller-defined communication.

This also reverts previous-`WebSocket` users to their original state
(sans the code for passing the bearer token in the query string),
swapping in `AuthenticatedWebSocket` in place of `WebSocket`.

* Create a single authnWsUpgrader with a comment justifying why we turn off CORS

* recieving to receiving

* resolve comments

---------

Co-authored-by: Isaiah Becker-Mayer <isaiah@goteleport.com>
* Updates `desktopPlaybackHandle` to new ws paradigm

This was mistakenly left out of #37520.
This commit also refactors `WithClusterAuthWebSocket` slightly for easier
comprehension, and updates the vite config to facilitate the new websocket
endpoints in development mode.

* Update lib/web/apiserver.go

Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>

---------

Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
@lxea lxea force-pushed the lxea/websocket-bearer-token-v13 branch from 34b9ebb to b0e8c6b Compare February 13, 2024 16:34
@r0mant
Copy link
Copy Markdown
Collaborator

r0mant commented Feb 13, 2024

We're not backporting this to v13.

@r0mant r0mant closed this Feb 13, 2024
@r0mant r0mant deleted the lxea/websocket-bearer-token-v13 branch February 13, 2024 17:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants