마주쳤던 이슈 기록
#7. 로그인 이후 response Header에 JWT 미전달
DvdHan
2023. 5. 18. 22:44
[에러]
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);
}