[TIL] 24.11.28 THU

GDORI·2024년 11월 28일
0

TIL

목록 보기
116/143
post-thumbnail

JWT

Json Web Token의 약자로 클라이언트와 서버 간 인증 및 정보 교환에 사용되는 JSON 기반의 경량 토큰이다. 소켓 통신 시 클라이언트의 인증 상태를 검증하는데 쓸 수 있다.

아.. 토큰 없으면 소켓 연결 자체를 못하게 하고 싶은데..

socket.io와 같은 고수준 라이브러리는 미들웨어를 통해 인증 처리 후 연결 차단이 가능한데, net 모듈의 경우 저수준 TCP 연결 관리 라이브러리이기 때문에 사용할 수 없다.
그나마, 활용할 수 있는 것은 몇일 전 TIL(TIL-24.11.25-MON)로 올린 net.BlockList() 같이 연결이 된 후 검증하고 연결을 끊는 법을 이용할 수 밖에 없다.

여기도 once가 되네?

socket.io에서 썼던 socket.once가 net에서도 지원을 한다.
이걸 활용하여 첫 통신에 토큰검증을 하고 만약 토큰이 아닌 다른 내용의 버퍼를 보내게 되면 연결을 끊어버리는 방식을 써도 좋을 것 같다.

예시 코드

socket.once('data', (data) => {
        try {
            const token = data.toString();

            // 토큰 검증
            jwt.verify(token, SECRET_KEY, (err, decoded) => {
                if (err) {
                    console.log('Authentication failed');
                    socket.write('Authentication failed');
                    socket.end(); 
                    return;
                }   
                socket.write('Authentication successful');
             
            });
        } catch (e) {
            console.log('Error processing token');
            socket.write('Error processing token');
            socket.end();
        }
    });

이거 socket.once 되나 확인하다가 깨달은건데...

만약 정해진 틀에서 벗어난 패킷을 받게 되면.. 제대로 파싱이 안되고 계속 패킷이 무효처리되는 문제를 식별했다.
이 부분 내일 좀 고민해보고 보강하는 작업을 가져야겠다.
잘못된 패킷이 들어 올 확률이 얼마나 되겠냐만은, 안전장치정도는 있어야 할 것 같다.

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글