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 중국어 웹사이트의 기타 관련 기사를 참조하세요!