Вот моя установка: я создаю службу (используя Negroni и Gorilla) с входом пользователя в систему, где при входе пользователь получает файл cookie сеанса, который сервер использует для авторизации защищенных конечных точек. Одна из защищенных конечных точек позволяет пользователю/клиенту открыть веб-сокет с сервером, например:
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"
— и я почти уверен, что это не проблема с клиентом веб-сокета (если вам интересно, я тестирую его с помощью этого пакета Python : https://github.com/liris/websocket-client). Правильно ли я подхожу к аутентификации веб-сокета?
Любая помощь/совет будет принята с благодарностью!