Maison >développement back-end >Golang >Comment authentifier les connexions WebSocket à l'aide d'un middleware HTTP ?
Le protocole de communication WebSocket ne dispose pas de mécanismes d'authentification intégrés. Il devient nécessaire d'implémenter l'authentification dans les connexions WebSocket à l'aide d'un middleware HTTP. Cet article vise à établir comment authentifier les connexions WebSocket, en identifiant les stratégies potentielles et leur mise en œuvre.
Cette stratégie consiste à sécuriser la mise à niveau de la connexion avec un en-tête personnalisé, tel sous le nom de "X-Api-Key", via un middleware. Seuls les clients qui lancent la conversation avec une clé correspondante seront mis à niveau. Cependant, le code fourni dans la question échoue car la requête GET initiale du client s'effectue via HTTP, tandis que la demande de mise à niveau ultérieure s'effectue via WebSocket, ce qui entraîne une incompatibilité du côté du serveur.
Pour corriger ce problème, envoyez un poignée de main WebSocket authentifiée. Incluez les en-têtes d'authentification dans le dernier argument de la fonction 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>
Bien que la stratégie 2 décrite ne soit pas détaillée, elle implique l'authentification du client une fois la connexion WebSocket établie. Le client doit envoyer un nom d'utilisateur et un mot de passe, que le serveur vérifie. En cas de non-concordance, la connexion est interrompue. Cette approche pourrait justifier des clarifications supplémentaires et des suggestions de mise en œuvre.
Côté serveur, utilisez le code de l'application pour l'authentification des requêtes HTTP afin d'authentifier également la poignée de main WebSocket. Intégrez cette logique d'authentification dans le middleware HTTP.
Cette approche garantit que les clients peuvent s'authentifier à l'aide du protocole WebSocket et exploiter les mécanismes d'authentification existants mis en œuvre pour les requêtes HTTP, offrant ainsi une expérience d'authentification cohérente et sécurisée sur tous les canaux de communication.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!