Mengesahkan Sambungan WebSocket melalui HTTP Middleware
Sambungan WebSocket menyediakan cara komunikasi masa nyata antara pelanggan dan pelayan. Walau bagaimanapun, tidak seperti permintaan HTTP, WebSockets sememangnya tidak menyokong kebenaran atau pengesahan. Untuk menangani perkara ini, perisian tengah HTTP boleh digunakan untuk menjamin sambungan WebSocket.
Pernyataan Masalah
Satu pendekatan biasa adalah untuk mengesahkan jabat tangan peningkatan menggunakan kod aplikasi untuk mengesahkan HTTP permintaan. Walau bagaimanapun, melaksanakan pendekatan ini di Golang menggunakan penaik taraf WebSocket Gorilla telah terbukti mencabar.
Cadangan Komuniti
Sesetengah cadangan komuniti termasuk:
Strategi Gagal
Strategi yang gagal melibatkan penambahan pengepala tersuai ("X-Api -Key") kepada permintaan HTTP GET awal dan hanya menaik taraf pelanggan dengan kunci yang sepadan. Walau bagaimanapun, ini mengakibatkan pelanggan gagal menggunakan protokol WebSocket dengan token 'naik taraf' tidak ditemui ralat pada pelayan.
Penyelesaian yang Diperbaiki untuk Strategi 1
Kepada meningkatkan strategi 1, pengesahan harus dilakukan pada jabat tangan WebSocket itu sendiri. Ini boleh dicapai dengan menghantar pengepala pengesahan sebagai hujah terakhir untuk Dail dalam kod klien.
<br>func main() {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/ws"} headers := http.Header{"X-Api-Key": []string{"test_api_key"}} conn, _, err := websocket.DefaultDialer.Dial(u.String(), headers) if err != nil { log.Fatalf("dial err: %v", err) }
}
Di bahagian pelayan, pengesahan harus dilakukan menggunakan kod sedia ada aplikasi untuk mengesahkan permintaan HTTP semasa proses jabat tangan. Ini memastikan bahawa sambungan WebSocket diwujudkan hanya jika pelanggan diberi kuasa.
Atas ialah kandungan terperinci Bagaimanakah HTTP Middleware Boleh Melindungi Sambungan WebSocket di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!