大猩猩websocket与cookie身份验证

Cod*_*ody 7 cookies go websocket gorilla

这是我的设置:我正在使用用户登录构建服务(使用Negroni和Gorilla),在登录时,用户获取会话cookie,服务器使用该cookie来授权受保护的端点.其中一个受保护的端点允许用户/客户端使用服务器打开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")
Run Code Online (Sandbox Code Playgroud)

但是,req.Cookies()总是空的,这意味着我不能授权任何请求"/auth/connection"- 而且我几乎肯定它不是websocket客户端的问题(如果你很好奇,我正在使用这个Python包测试它:https ://github.com/liris/websocket-client).我是否正确接近websocket的身份验证?

任何帮助/建议将不胜感激!

Cer*_*món 2

服务器将 WebSocket 握手作为普通 HTTP 请求进行处理,直至调用 Upgrade。使用用于普通 HTTP 请求的任何身份验证。

Gorilla 包在带有 auth 注释的代码行中未运行。