【问题标题】:Gorilla websocket with cookie authentication带有 cookie 身份验证的 Gorilla websocket
【发布时间】:2015-06-02 04:08:08
【问题描述】:

这是我的设置:我正在使用用户登录构建服务(使用 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 的身份验证?

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

【问题讨论】:

  • 打印req.Header查看客户端发送的headers。如果您没有看到 cookie 标头或它的格式不正确,那么问题出在客户端库或应用程序上。
  • 服务器将 WebSocket 握手作为正常的 HTTP 请求处理,直到调用升级为止。 Gorilla 包在带有 auth 注释的代码行中不起作用。
  • 是的,你是对的——cookie 格式不正确,没有正确解析为 req.Cookies。感谢您的帮助!
  • 请将其标记为已回答,以免它出现在未回答列表中。或者完全删除它,因为它最终不是围棋问题。

标签: cookies go websocket gorilla


【解决方案1】:

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

Gorilla 包在带有 auth 注释的代码行中不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 2021-05-12
    • 1970-01-01
    • 2011-09-04
    • 2017-10-19
    • 2015-01-25
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多