Inflearn brand logo image

인프런 커뮤니티 질문&답변

aminez4466님의 프로필 이미지
aminez4466

작성한 질문수

웹소켓/STOMP 채팅서비스(spring, vue, redis)

stomp jwt인증 처리

/connect 경로에 대한 토큰 검증의 필요성

작성

·

45

0

JwtAuthFilter에서 /connect 경로의 토큰 검증도 이루어진다면 interceptor는 구현할 필요는 없는건가요? 동일하게 subscribe, disconnect도 JwtAuthFilter에서 검증이 이루어지니까 interceptor 코드는 필요 없는 걸까요?

답변 1

0

bradkim님의 프로필 이미지
bradkim
지식공유자

안녕하세요~

웹소켓 연결시의 요청은 http요청이 아니므로 jwtfilter에서는 검증이 어려울것으로 생각됩니다. 혹시 아직 해당부분 못들으신것 같은데 수업에서 언급이 있습니다!!

aminez4466님의 프로필 이미지
aminez4466
질문자

먼저 빠른 답변 감사합니다!

stomp jwt인증 처리 영상 마지막에 설명하신 주석 부분인
"웹소켓요청(connect) 등의 요청시에는 http header 등 http 메시지를 넣어올 수 있고,"
이 부분이 저는 "/connect 요청으로 들어올 시 일회성으로 http request 가 들어오고 http request header에 담긴 토큰 값을 인터셉트 해서 StompHandler에서 토큰 검증을 한다" 라고 이해했는데

저는 현재 쿠키에 토큰을 담아서 보내고 있지만,

1회 요청이 기존 http request처럼 온다면 Stomp Handler에서 인터셉트 하지않아도 동일하게 security filter가 동작하지 않을까? 라고 생각했습니다

/connect 요청의 구조가 http request와 동일한 구조인 것이지, 요청 자체는 Security Filter를 통과하는 걸까요?

bradkim님의 프로필 이미지
bradkim
지식공유자

웹소켓의 통신방식은 최초에 http를 통해 연결을 맺고, 그 이후에는 websocket프로토콜로 이어지게 됩니다.

 

말씀해주신대로 최초의 http요청을 filter에서 token검증을 할수는 있을것으로 보여집니다. 다만, 기존의 filter방식으로는 어려운것으로 알고 있습니다.

 

그런데, 위와 같은 방식의 검증자체가 일반적이지 않습니다. 왜냐면 추후에 http를 통한 연결이후에는 websocket프로토콜로 넘어가게 되는데, 그 웹소켓 요청은 filter를 거치지 않게 됩니다. 그런데 서버에서는 한번 연결맺고 난 이후에도 사용자의 token을 꺼내서 지속적으로 해당 요청이 누구의 요청인지를 파악해야 하는 경우가 발생합니다. 이때에 만약 filter를 쓰게 되면 해당 요청에서 토큰을 꺼낼수 없게 됩니다.

 

그래서, 최종적으로 웹소켓 프로토콜 레벨의 interceptor에서 토큰을 처리하는게 맞다고 생각하시면 될것 같습니다.

aminez4466님의 프로필 이미지
aminez4466
질문자

빠른 답변 정말 감사합니다!!

aminez4466님의 프로필 이미지
aminez4466

작성한 질문수

질문하기