WebSocket 通訊協定缺乏內建的驗證機制。有必要使用 HTTP 中間件在 WebSocket 連線中實作驗證。本文旨在建立如何對 WebSocket 連線進行身份驗證,確定潛在的策略及其實作。
此策略涉及使用自訂標頭保護連線升級,例如作為“X-Api-Key”,透過中介軟體。只有使用匹配密鑰發起對話的用戶端才會升級。但是,問題中提供的程式碼失敗,因為客戶端初始 GET 請求是透過 HTTP 進行的,而後續升級請求是透過 WebSocket 進行的,導致伺服器端不符。
要修正此問題,請傳送經過驗證的 WebSocket 握手。在 Dial 函數的最後一個參數中包含身份驗證標頭。
<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>
雖然所描述的策略 2 沒有非常詳細,但它涉及對WebSocket 連線建立後的客戶端。客戶端需要發送使用者名稱和密碼,伺服器驗證該使用者名稱和密碼。一旦不匹配,連線就會終止。這種方法可能需要進一步的澄清和實現建議。
在伺服器端,使用應用程式的程式碼進行 HTTP 請求驗證來驗證 WebSocket 握手。將此驗證邏輯整合到 HTTP 中間件中。
此方法可確保用戶端可以使用 WebSocket 協定進行身份驗證,並利用為 HTTP 請求實現的現有身份驗證機制,從而跨通訊管道提供一致且安全的身份驗證體驗。
以上是如何使用 HTTP 中間件驗證 WebSocket 連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!