Горилла 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.