透過 HTTP 中介軟體驗證 WebSocket 連線
WebSocket 連線提供了客戶端和伺服器之間即時通訊的方式。但是,與 HTTP 請求不同,WebSocket 本身並不支援授權或驗證。為了解決這個問題,可以使用 HTTP 中間件來保護 WebSocket 連線。
問題陳述
一種常見的方法是使用應用程式的 HTTP 驗證程式碼來驗證升級握手請求。然而,事實證明,使用 Gorilla 的 WebSocket 升級程式在 Golang 中實現這種方法具有挑戰性。
社群建議
一些社群建議包括:
失敗的策略
失敗的策略涉及添加自訂標頭(“X-Api -Key") 到初始HTTP GET 請求,並且僅升級具有匹配密鑰的客戶端。然而,這導致客戶端無法利用 WebSocket 協議,並在伺服器上出現「升級」令牌未找到錯誤。
策略 1 的改進解決方案
至改進策略1,認證應該在WebSocket握手本身上進行。這可以透過將身份驗證標頭作為最後一個參數傳遞給客戶端程式碼中的 Dial 來實現。
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) }
<p>func main() {<br></p><p>}</p>在伺服器端,應使用應用程式現有的程式碼來執行握手過程中對HTTP 請求進行身份驗證的程式碼。這可確保僅在客戶端獲得授權的情況下才能建立 WebSocket 連線。
以上是HTTP 中介軟體如何保護 Golang 中的 WebSocket 連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!