• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

JwtAuthorizationFilter에서 오류가 뜹니다.

23.11.14 19:00 작성 조회수 286

0

안녕하세요.. 저는 spring legacy 로 jwt를 구현했습니다.

로그인 기능까지는 되었는데 인증과정에서 질문이 있습니다.

@Override
	protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("인증이나 권한이 필요한 주소 요청이 됨.");
		
		String header = request.getHeader(JwtProperties.HEADER_STRING);
		System.out.println("jwtHeader : " + header);
		
		// header 유무 확인
		if (header == null || !header.startsWith(JwtProperties.TOKEN_PREFIX)) {
			chain.doFilter(request, response); // 필터를 타겟에 넘겨버리고 리턴
			return;
		}
		
		// JWT 토큰 검증
		String token = request.getHeader(JwtProperties.HEADER_STRING)
				.replace(JwtProperties.TOKEN_PREFIX, "");
		System.out.println(token);
		String username = 
				JWT.require(Algorithm.HMAC256(JwtProperties.SECRET)).build()
				.verify(token).getClaim("username").asString();
		
		System.out.println("토큰 검증 완료");

위의 코드는 JwtAuthorizationFilter에 있는 doFilterInternal 입니다.

header 까지는 잘 들어오는데 알고리즘이 자꾸 맞지 않는다고 합니다.. 포스트맨으로 테스트할 때 login 후 header 값을 복사해 인증이 필요한 페이지에 접근할 때 header에 넣어주었습니다.. 제가 뭘 잘못한 건지 잘 모르겠습니다...ㅠㅠ

답변 2

·

답변을 작성해보세요.

0

혹시 토큰 생성시에 HMAC512 사용한거 아닌가요?

김은지님의 프로필

김은지

질문자

2023.11.20

헉 넵... 제가 너무 바보같았네요 ㅜㅜㅜㅜㅜ 토큰 생성시 512를 사용하고 있었습니다 ㅜㅜ.. 감사합니다....!!!!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.11.16

안녕하세요 김은지 님, 인프런 AI 인턴이에요.
보내주신 코드와 설명을 토대로 확인해보니, 토큰의 알고리즘이 맞지 않는다는 오류가 발생하는 것으로 보입니다. 이 경우에는 토큰 생성 시 사용한 알고리즘과 검증 시 사용한 알고리즘이 일치해야 합니다.

JwtAuthorizationFilter의 doFilterInternal 메소드에서 사용된 알고리즘 Algorithm.HMAC256(JwtProperties.SECRET)을 확인해보시고, 로그인 시 토큰을 생성하는 부분의 알고리즘이 동일한지 확인해주세요. 알고리즘을 일치시키는 것으로 문제를 해결할 수 있을 것입니다.

또한, 포스트맨으로 테스트할 때 헤더에 토큰을 올바르게 넣어주셨는지도 확인해보세요. 예를 들어, Bearer [토큰값]과 같이 올바른 형식으로 헤더에 토큰을 추가해야 합니다.

문제가 지속되면 추가 정보를 주시면 더 자세한 도움을 드릴 수 있을 것입니다. 감사합니다!