Skip to content

πŸš€ [κΈ°λŠ₯κ°œμ„ ][WebSocket] μ•‘μ„ΈμŠ€ 토큰 λ§Œλ£Œμ— λ”°λ₯Έ μ—λŸ¬ 응닡 체계 ꡬ좕 #722

@Yooonjeong

Description

@Yooonjeong

πŸ“ ν˜„μž¬ 문제점

  1. 전솑 쀑(SEND/SUBSCRIBE) 인증 만료 λŒ€μ‘ λΆ€μž¬

    • λ°±μ—”λ“œ StompChannelInterceptorλŠ” μ—°κ²°(CONNECT)뿐만 μ•„λ‹ˆλΌ λ©”μ‹œμ§€ 전솑(SEND) 및 ꡬ독(SUBSCRIBE) μ‹œμ μ—λ„ 토큰 만료λ₯Ό κ²€μ‚¬ν•©λ‹ˆλ‹€.
    • μ›Ήμ†ŒμΌ“ μœ μ§€ 쀑 토큰이 만료되면 μ„œλ²„λŠ” μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€μ§€λ§Œ, ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λͺ…ν™•ν•œ STOMP ERROR ν”„λ ˆμž„μ„ μ „λ‹¬ν•˜μ§€ μ•Šκ³  μ†ŒμΌ“μ„ λ‹«μŠ΅λ‹ˆλ‹€.
  2. ν΄λΌμ΄μ–ΈνŠΈ

    • ν˜„μž¬ ν”„λ‘ νŠΈμ—”λ“œλŠ” μ—λŸ¬μ˜ 원인이 '인증 만료'인지 'λ‹¨μˆœ λ„€νŠΈμ›Œν¬ μž₯μ• '인지 ꡬ뢄할 수 μžˆλŠ” 정보가 μ—†μŠ΅λ‹ˆλ‹€.
    • 이둜 인해 토큰이 λ§Œλ£Œλ˜μ–΄ 연결이 λŠκ²¨λ„ μ‚¬μš©μžμ—κ²Œ 재둜그인 μ•ˆλ‚΄λ‚˜ 토큰 κ°±μ‹  λ“±μ˜ μ μ ˆν•œ ν”Όλ“œλ°±μ„ μ œκ³΅ν•˜μ§€ λͺ»ν•˜κ³ , 톡신이 끊긴 채 λ°©μΉ˜λ˜λŠ” 상황이 λ°œμƒν•©λ‹ˆλ‹€.

πŸ› οΈ ν•΄κ²° λ°©μ•ˆ / μ œμ•ˆ κΈ°λŠ₯

[BE]

  • μ—λŸ¬ 헀더 전솑: AuthenticateExceptionInterceptorμ—μ„œ μ—λŸ¬ λ°œμƒ μ‹œ, λ‹¨μˆœνžˆ μ†ŒμΌ“μ„ λ‹«μ§€ μ•Šκ³  error-code: EXPIRED_ACCESS_TOKEN 헀더λ₯Ό ν¬ν•¨ν•œ STOMP ERROR ν”„λ ˆμž„μ„ ν΄λΌμ΄μ–ΈνŠΈμ— μ „μ†‘ν•©λ‹ˆλ‹€.
  • μ˜ˆμ™Έ λ‘œκΉ… μ΅œμ ν™”: 인증 κ΄€λ ¨ 만료 μ˜ˆμ™ΈλŠ” μŠ€νƒ 트레이슀 전체가 μ•„λ‹Œ μš”μ•½ μ •λ³΄λ§Œ κΈ°λ‘ν•˜μ—¬ μ‹œμŠ€ν…œ λΆ€ν•˜λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€.

[FE]

  • μ—λŸ¬ μ½”λ“œ 기반 λΆ„κΈ° 처리: onStompError μˆ˜μ‹  μ‹œ 헀더λ₯Ό λΆ„μ„ν•˜μ—¬ 인증 μ—λŸ¬μΈ 경우 λ¬΄μ˜λ―Έν•œ μž¬μ—°κ²° μ‹œλ„λ₯Ό μ¦‰μ‹œ μ€‘λ‹¨ν•©λ‹ˆλ‹€.
  • 토큰 μžλ™ κ°±μ‹  및 볡ꡬ: μ—°κ²° 쀑단 ν›„ refreshAccessToken()을 ν˜ΈμΆœν•˜μ—¬ 토큰을 μ΅œμ‹ ν™”ν•˜κ³ , κ°±μ‹  성곡 μ‹œμ—λ§Œ μ›Ήμ†ŒμΌ“μ„ λ‹€μ‹œ μ—°κ²°ν•˜μ—¬ μ„Έμ…˜μ„ λ³΅κ΅¬ν•©λ‹ˆλ‹€.
  • 전솑 μ „ λ°©μ–΄ 둜직: λ©”μ‹œμ§€ 전솑 직전 토큰 μœ νš¨μ„±μ„ μ²΄ν¬ν•˜κ±°λ‚˜, μ—λŸ¬ λ°œμƒ μ‹œ μœ„ 볡ꡬ λ‘œμ§μ„ 타도둝 보μž₯ν•˜μ—¬ μ„œλΉ„μŠ€ 연속성을 μœ μ§€ν•©λ‹ˆλ‹€.

βš™οΈ μž‘μ—… λ‚΄μš©

  • [BE] AuthenticateExceptionInterceptor μˆ˜μ •: μ—λŸ¬ 헀더(error-code) μΆ”κ°€ 및 ERROR ν”„λ ˆμž„ λ°˜ν™˜ 둜직 보완
  • [FE] WebSocketProvider λ‚΄ onStompError 콜백 κ΅¬ν˜„: deactivate -> refresh -> connect ν”„λ‘œμ„ΈμŠ€ ꡬ좕

πŸ™‹β€β™‚οΈ λ‹΄λ‹Ήμž

  • λ°±μ—”λ“œ: @Yooonjeong
  • ν”„λ‘ νŠΈμ—”λ“œ: 이름
  • λ””μžμΈ: 이름

Metadata

Metadata

Assignees

Labels

enhancementκΈ°λŠ₯ κ°œμ„ /ν–₯상 (Enhancement)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions