具有 cookie 身份验证的大猩猩 websocket

Gorilla websocket with cookie authentication

这是我的设置:我正在构建一个带有用户登录的服务(使用 Negroni 和 Gorilla),在登录时,用户会获得一个会话 cookie,服务器使用它来授权受保护的端点。受保护端点之一允许 user/client 使用服务器打开 websocket,如下所示:

app := negroni.New()

r := mux.NewRouter()

r.HandleFunc("/auth/connection", func(rw http.ResponseWriter, req *http.Request) {
    // authorize request using req.Cookie("session_id")

    // create websocket
    conn, err := upgrader.Upgrade(rw, req, nil)
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    // do stuff...
})

app.UseHandler(r)

app.Run(":3000")

但是,req.Cookies() 始终为空,这意味着我无法授权对 "/auth/connection" 的任何请求——而且我几乎可以肯定这不是 websocket 客户端的问题(如果您很好奇,我正在使用这个 Python 包对其进行测试:https://github.com/liris/websocket-client)。我是否正确地接近了 websocket 的身份验证?

任何 help/advice 将不胜感激!

服务器将 WebSocket 握手作为普通 HTTP 请求处理,直到调用升级为止。使用您将用于普通 HTTP 请求的任何身份验证。

Gorilla 包在带有 auth 注释的代码行不可用。