2024. 8. 7. 19:48ㆍNestJs
서론
백엔드에서 socket.io를 Postman으로 테스트하는 도중, socket.io는 handshake에서 headers로 토큰을 보낼 수 있지만, 구글링을 통해 auth에 토큰을 보내야 한다는 것을 확인했습니다. 이를 바탕으로 auth에 토큰을 어떻게 보낼 수 있는지 조사해 보았습니다.
getUserIdFromSocket(client: Socket): number | null {
const authHeader = client.handshake.auth.token;
const token =
authHeader && authHeader.toLowerCase().startsWith("bearer ")
? authHeader.substring(7) // "Bearer ".length = 7
: null;
if (token) {
try {
const decoded = this.jwtService.verify(token, {
secret: this.configService.get<string>("ACCESS_TOKEN_SECRET"),
});
return decoded.userId;
} catch (error) {
console.error("Invalid token", error);
return null;
}
}
return null;
}
Postman을 사용하여 {token: "123"} 형태로 auth에 토큰을 보내 테스트해 보았지만, auth에 제대로 전달되지 않았습니다. 추가로 구글링을 통해 많은 개발자들이 쿼리 파라미터로 토큰을 보내는 경우가 더 많다는 것을 알게 되었습니다.
왜 auth에 보내는 경우와 쿼리 파라미터로 보내는 경우가 있는지 확인해 본 결과, 다음과 같은 이유를 찾을 수 있었습니다:
1. 초기 연결 문제: auth와 headers는 처음 연결 시에는 문제가 없지만, 그 이후에는 제대로 인식되지 않을 수 있습니다.
2. 보안성 문제: auth와 headers를 사용할 경우 보안성이 떨어질 수 있습니다.
이로 인해 많은 개발자들이 쿼리 파라미터를 사용하여 토큰을 전달하고 있었습니다. 쿼리 파라미터를 사용하면 인식되지 않는 문제를 방지하고 보안성을 높일 수 있기 때문입니다.
참고 자료
How to send authentication payload? · socketio socket.io · Discussion #4072
I am trying to use Postman to "connect" to a Socket.io server. Using a regular client in NodeJS would look like this: const io = io(url, { auth: { token: 123 } }); How to I pass this auth informati...
github.com
'NestJs' 카테고리의 다른 글
NestJS cache-manager 사용하기 (5) | 2024.10.03 |
---|---|
[NestJS] google-cloud-text-to-speech vs AWS Polly 차이점 & 사용법 (4) | 2024.10.01 |
[NestJS] Unknown column in where clause 에러 발생 (0) | 2024.07.25 |
[NestJS] Faker 연동 (0) | 2024.07.23 |
[NestJS] AWS S3에 파일 업로드 @aws-sdk/client-s3 (0) | 2024.07.15 |