본문 바로가기
유니티/서버

[Mirror] NetworkAuthenticator, 인증시스템

by 유니티세상 2025. 6. 23.

기능

NetworkAuthenticator는 Mirror 네트워크에서 서버와 클라이언트 간의 인증 절차를 처리하기 위한 추상 클래스입니다.

  • 클라이언트가 서버에 접속할 때 인증을 요구하거나 거부할 수 있게
  • 인증 로직을 커스터마이징할 수 있도록 제공됨 (예: 닉네임 중복 검사, 토큰 검증 등)

 

기본 흐름 (Client ↔ Server)

 

  • 클라이언트 접속 시
    • OnClientAuthenticate() 호출됨
    • 인증 요청 메시지(AuthRequestMessage)를 서버에 전송
  • 서버에서 인증 처리
    • OnServerAuthenticate(conn)은 기본적으로 아무 동작 안 함
    • 대신 OnAuthRequestMessage(conn, msg) 등 메시지 핸들러에서 인증 처리
    • 인증 성공 시:
      • conn.authenticationData에 사용자 데이터 저장 가능
      • ServerAccept(conn) 호출
    • 인증 실패 시:
      • conn.isAuthenticated = false
      • ServerReject(conn) 호출
  • 클라이언트 수신 처리
    • 서버가 보낸 응답 메시지(AuthResponseMessage)를 받음
    • 성공이면 ClientAccept(), 실패면 NetworkManager.StopHost() 등 호출

 

구조적 포인트

메서드 위치 설명
OnStartServer() Server 인증 메시지 핸들러 등록
OnServerAuthenticate(conn) Server 접속 시 자동 호출. 인증 메시지 기다리기 용
OnAuthRequestMessage(conn, msg) Server 인증 메시지를 수신하고 처리
ServerAccept(conn) Server 인증 성공 시 호출
ServerReject(conn) Server 인증 실패 시 호출
OnStartClient() Client 인증 응답 메시지 핸들러 등록
OnClientAuthenticate() Client 서버 접속 직후 자동 호출. 인증 메시지 송신
OnAuthResponseMessage(msg) Client 서버 응답 수신 후 인증 결과 처리
ClientAccept() Client 인증 성공 처리
NetworkManager.StopHost() Client 인증 실패 시 연결 종료 처리용

사용 예시

예시1: 단순 인증 (MirrorNetworkAuthenticator)

  • 별다른 데이터 없이 인증 요청 및 응답만 주고받고 바로 Accept()

예시2: 닉네임 중복 검사 (ChatAuthenticator)

  • 클라이언트가 authUsername 전송
  • 서버는 기존 이름과 중복 검사 → 성공 시 수락, 실패 시 거절
  • conn.authenticationData에 사용자 이름 저장 (추후 활용 가능)

 

요약 흐름도

클라이언트

입력한 이름 → AuthRequestMessage 전송 → 서버 응답 받음 → 성공: ClientAccept() / 실패: StopHost()

서버

클라이언트 접속 → 메시지 수신 대기 → 이름 중복 확인 → - 중복X: 저장 + 응답 + ServerAccept() - 중복O: 응답 + 1초 뒤 ServerReject()

확장 아이디어

  • DB 연동해서 로그인/회원가입 기능 구현 가능
  • AuthRequestMessage에 비밀번호, 토큰 등 추가 가능
  • authenticationData는 NetworkBehaviour.OnStartServer()에서 conn.authenticationData as string으로 참조 가능