Веб-сокет Gorilla с аутентификацией cookie

Вот моя установка: я создаю службу (используя 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). Правильно ли я подхожу к аутентификации веб-сокета?

Любая помощь/совет будет принята с благодарностью!


person Cody    schedule 29.03.2015    source источник
comment
Напечатайте req.Header, чтобы просмотреть заголовки, отправленные клиентом. Если вы не видите заголовок файла cookie или он каким-то образом искажен, проблема связана с клиентской библиотекой или приложением.   -  person Cerise Limón    schedule 29.03.2015
comment
Сервер обрабатывает рукопожатие WebSocket как обычный HTTP-запрос до момента, когда вызывается обновление. Пакет Gorilla не используется в строке кода с комментарием авторизации.   -  person Cerise Limón    schedule 29.03.2015
comment
Да, вы были правы — файл cookie был неправильно сформирован и неправильно анализировался в req.Cookies. Спасибо за помощь!   -  person Cody    schedule 29.03.2015
comment
Отметьте это как отвеченное, чтобы оно не отображалось в списке неотвеченных. Или удалите его полностью, так как это не вопрос Go, в конце концов.   -  person Jeff Allen    schedule 02.02.2016


Ответы (1)


Сервер обрабатывает рукопожатие WebSocket как обычный HTTP-запрос до момента, когда вызывается Upgrade. Используйте любую аутентификацию, которую вы бы использовали для обычных HTTP-запросов.

Пакет Gorilla не используется в строке кода с комментарием авторизации.

person Cerise Limón    schedule 14.02.2016