以下是我的设置:我使用用户登录构建服务(使用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")
但是,req.Cookies()
始终为空,这意味着我无法向"/auth/connection"
授权任何请求 - 我几乎肯定这不是websocket客户端的问题(如果您有点好奇,我会使用这个Python包测试它:https://github.com/liris/websocket-client)。我正在接近对websocket的认证吗?
非常感谢任何帮助/建议!
答案 0 :(得分:1)
服务器将WebSocket握手作为普通的HTTP请求处理,直到调用Upgrade。使用您用于普通HTTP请求的任何身份验证。
Gorilla软件包在代码行中没有使用auth评论。