Protokol komunikasi WebSocket tidak mempunyai mekanisme pengesahan terbina. Ia menjadi perlu untuk melaksanakan pengesahan dalam sambungan WebSocket menggunakan perisian tengah HTTP. Artikel ini bertujuan untuk menetapkan cara untuk mengesahkan sambungan WebSocket, mengenal pasti strategi yang berpotensi dan pelaksanaannya.
Strategi ini melibatkan keselamatan peningkatan sambungan dengan pengepala tersuai, seperti sebagai "X-Api-Key," melalui perisian tengah. Hanya pelanggan yang memulakan perbualan dengan kunci yang sepadan akan dinaik taraf. Walau bagaimanapun, kod yang diberikan dalam soalan gagal kerana permintaan GET awal pelanggan adalah melalui HTTP, manakala permintaan naik taraf seterusnya adalah melalui WebSocket, yang membawa kepada ketidakpadanan di hujung pelayan.
Untuk membetulkan isu ini, hantarkan jabat tangan WebSocket yang disahkan. Sertakan pengepala pengesahan dalam argumen terakhir untuk fungsi Dail.
<code class="go">func main() { u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/ws"} conn, _, err := websocket.DefaultDialer.Dial(u.String(), http.Header{"X-Api-Key": []string{"test_api_key"}}) if err != nil { log.Fatalf("dial err: %v", err) } err = conn.WriteMessage(websocket.TextMessage, []byte("hellow websockets")) if err != nil { log.Fatalf("msg err: %v", err) } }</code>
Walaupun strategi yang diterangkan 2 tidak terperinci secara meluas, ia melibatkan pengesahan klien selepas sambungan WebSocket telah diwujudkan. Pelanggan dikehendaki menghantar nama pengguna dan kata laluan, yang pelayan mengesahkan. Apabila tidak sepadan, sambungan ditamatkan. Pendekatan ini mungkin memerlukan penjelasan lanjut dan cadangan pelaksanaan.
Di bahagian pelayan, gunakan kod aplikasi untuk pengesahan permintaan HTTP untuk turut mengesahkan jabat tangan WebSocket. Sepadukan logik pengesahan ini ke dalam perisian tengah HTTP.
Pendekatan ini memastikan pelanggan boleh membuat pengesahan menggunakan protokol WebSocket dan memanfaatkan mekanisme pengesahan sedia ada yang dilaksanakan untuk permintaan HTTP, memberikan pengalaman pengesahan yang konsisten dan selamat merentas saluran komunikasi.
Atas ialah kandungan terperinci Bagaimana untuk Mengesahkan Sambungan WebSocket Menggunakan HTTP Middleware?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!