2015-03-29 13 views
6

Ecco il mio setup: Sto creando un servizio (utilizzando Negroni e Gorilla) con login utente, dove all'accesso, l'utente ottiene un cookie di sessione che il server utilizza per autorizzare endpoint protetti. Uno degli endpoint protetti consente all'utente/cliente per aprire un websocket con il server, in questo modo:Gorilla websocket con autenticazione dei 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") 

Tuttavia, req.Cookies() è sempre vuoto, nel senso che non può autorizzare eventuali richieste di "/auth/connection" - mi e' quasi positivo non è un problema con il client websocket (se sei curioso, lo sto testando usando questo pacchetto Python: https://github.com/liris/websocket-client). Mi sto avvicinando all'autenticazione di una websocket correttamente?

Qualsiasi aiuto/consiglio sarebbe molto apprezzato!

+4

Stampa req.Header per visualizzare le intestazioni inviate dal client. Se non vedi l'intestazione del cookie o se è malformata in qualche modo, il problema è con la libreria o l'applicazione client. –

+2

Il server gestisce l'handshake WebSocket come una normale richiesta HTTP fino al punto in cui viene chiamato l'aggiornamento. Il pacchetto Gorilla non è in gioco sulla riga di codice con il commento auth. –

+0

Sì, avevi ragione: il cookie era malformato e non veniva analizzato correttamente in req.Cookies. Grazie per l'aiuto! – Cody

risposta

0

Il server gestisce l'handshake WebSocket come una normale richiesta HTTP fino al punto in cui viene chiamato l'aggiornamento. Usa qualsiasi autenticazione che useresti per le normali richieste HTTP.

Il pacchetto Gorilla non è in gioco sulla riga di codice con il commento auth.

Problemi correlati