Горилла websocket с аутентификацией cookie
вот моя настройка: я создаю службу (используя Negroni и Gorilla) с логином пользователя, где при входе в систему пользователь получает файл 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?
любая помощь/советы будут с благодарностью!
1 ответов
сервер обрабатывает рукопожатие WebSocket как обычный HTTP-запрос до момента вызова обновления. Используйте любую аутентификацию, которую вы бы использовали для обычных HTTP-запросов.
пакет Gorilla не находится в игре в строке кода с комментарием auth.