본문 바로가기

마주쳤던 이슈 기록

#7. 로그인 이후 response Header에 JWT 미전달

[에러]

JWT 적용하고 로그인 이후, response header를 통해
로그인 인증 유저에게 발행된 JWT Authorization이 전달되지 않아 서비스 이용이 불가능.

 

[원인]

로그인 인증 성공 시 JWT를 생성하여 response 헤더로
JWT 토큰을 전달하는 메서드에서 토큰만 발행하고 응답의 Header 필드에 전달해주지 않았음.

@Override
protected void successfulAuthentication(HttpServletRequest request,
                                        HttpServletResponse response,
                                        FilterChain chain,
                                        Authentication authResult) throws IOException, ServletException {
    Member member = (Member) authResult.getPrincipal();

    String accessToken = delegateAccessToken(member);
    String refreshToken = delegateRefreshToken(member);

    this.getSuccessHandler().onAuthenticationSuccess(request, response, authResult);
}

[해결]

로그인 인증 성공 시 JWT 토큰을 발행하고, 발행한 토큰을 response 의 필드에 직접 할당해주어 해결.

@Override
protected void successfulAuthentication(HttpServletRequest request,
                                        HttpServletResponse response,
                                        FilterChain chain,
                                        Authentication authResult) throws IOException, ServletException {
    Member member = (Member) authResult.getPrincipal();

    String accessToken = delegateAccessToken(member);
    String refreshToken = delegateRefreshToken(member);

    response.setHeader("Authorization", "Bearer "+accessToken);
    response.setHeader("Refresh", refreshToken);
    response.addHeader("Access-Control-Expose-Headers", "Authorization, Refresh");

    this.getSuccessHandler().onAuthenticationSuccess(request, response, authResult);
}