Authenticating WebSocket connections from the browser is a complex task due to limitations in setting headers with tokens. Several methods can be used for securely sending credentials from the browser to a WebSocket server, including passing access tokens via query parameters, using ephemeral tokens, sending tokens over WebSocket, using HTTP cookies, and utilizing the Sec-WebSocket-Protocol header. Each method has its advantages and disadvantages that must be considered based on project requirements. Alternatively, libraries like Ably can handle authentication securely, allowing developers to focus on other features.