Support cookies when authenticating websockets #44
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request adds support for using cookies in the authentication hooks when opening new WebSocket connections.
Currently, WebSocket authentication is only possible by passing an auth token in the
JoinRequestmessage. While this approach is functional, it is less secure and less flexible than cookie-based authentication.Cookies can be configured as HTTPS-only and inaccessible to page JavaScript, which helps protect authentication credentials from being exposed to potential XSS vulnerabilities. In contrast, an auth token included in the
JoinRequestmust be available to application-level JavaScript, making it inherently more vulnerable.In addition to improved security, cookie-based authentication allows
loro-protocolconnections to integrate more seamlessly with existing authentication mechanisms that already rely on cookies, reducing duplication and simplifying overall auth logic.This pull request introduces the following changes:
HandshakeAuthFn, which is executed during the WebSocket upgrade process.handshake_cookies.rs, has been added to validate cookie handling.handshakeAuthhook is introduced in the simple server configuration and is executed during the WebSocket upgrade. This closely mirrors theHandshakeAuthFnused on the Rust server. The main difference is that the fullIncomingMessageobject is passed to the function to allow for greater flexibility and future extensibility.handshake-auth.test.ts, has been added to verify thehandshakeAuthhook and cookie support.