inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Spring Cloud Gateway에서 Spring Cloud Config 연동

JWT Token SigningKey 관련 질문

1295

최학준

작성한 질문수 2

0

안녕하세요.

강의를 수강하던 중 이해하기 힘든 현상을 발견되어 이렇게 질문드립니다.

Jwt는 SigningKey로 복호화가 가능하다면, 유효한 토큰이다.(유효한 토큰이다란 기준이 여러 개 있습니다만) 라고 알고 있는데요. 아래와 같은 현상을 발견하게되서 질문하게 되었습니다.

(현재 Gateway server - token.secret = A)

(현재 User service - token.secret = A)

1.User-service 회원생성

2.User-service 로그인 (응답에서 jwt토큰 복사)

3.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 (response, 200)

여기까지는 정상입니다만


4.ecommerce.yml의 token.secret 변경 및 커밋

5.Gateway의 /refresh 호출

(현재 Gateway server - token.secret = B)

(현재 User service - token.secret = A)

(현재 JWT 토큰의 SigningKey = A)

6.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 (response, 200)

 

여기가 질문 포인트입니다. AuthorizationHeaderFilter의 isJwtValid의 코드를 보면

subject = Jwts.parser().setSigningKey(env.getProperty("token.secret"))
        .parseClaimsJws(jwt).getBody()
        .getSubject();

이런 구문이 있습니다. Jwt 생성 당시의 Siginingkey랑 다른 signingkey로 복호화하면 오류가 나면서 인가에 실패하는 것을 기대했습니다. 하지만 왜 정상적으로 200을 반환하는지 이해가 잘 되지 않습니다. (Gateway의 token.secret은 B로 변경됨을 로그로 확인했습니다. )

 

spring-boot jpa 아키텍처 spring-cloud kafka msa

답변 2

0

Matthew C

2년 가까이 지난 글이지만 댓글을 남겨봅니다.
최학준님께서 gateway를 통해 user-service application에 요청한 end-point는 아래의
POST user-service/users, POST user-service/login, GET user-service/actuator/health 3가지 입니다.
하지만 현재 gateway에서 해당 요청 3가지에 대해선 head에 담겨있는 bearer 토큰에 대한 검증을 모두 풀어둔 상태이기 때문에 403 코드를 리턴받고싶다면, GET user-service/users요청같은 AuthorizationHeaderFilter 필터가 적용된 uri를 호출해보시면 좋을 것 같습니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

JWT 인증에 사용되는 Signing Key는 특정 서비스에서 임의로 생성한 값으로, 이 값이 변경되면 이전에 발급된 JWT 토큰에 대한 인증이 실패합니다. 하지만, 현재 상황에서는 User Service에서 발급된 JWT 토큰의 Signing Key가 일치하지 않는 Gateway에서의 인증 요청이 정상적으로 처리되고 있다는 것으로 이해하고 있습니다.

가능성 있는 이유는, isJwtValid의 코드 구문에서 env.getProperty(“token.secret”)를 호출하는 순간, 현재 Gateway의 token.secret(B)가 아니라 이전의 User Service의 token.secret(A)값을 사용하고 있어서 발생할 수 있습니다. 이 코드 부분에서 env.getProperty(“token.secret”)이 실제로 사용되는 Signing Key 값인지 한 번더 확인해보셔야 할 것 같습니다.

그리고 JWT 토큰 자체는 인코딩된 문자열이기 때문에, Signing Key를 미리 알고 있다면 이를 디코딩하여 페이로드 값을 확인할 수 있습니다. 하지만, 수정된 JWT 토큰은 서명이 유효하지 않기 때문에 인가에 실패할 것 입니다.

이상입니다. 참고하시길 바랍니다.

kafka 업데이트 강의 듣고 시포요

0

85

1

강의 교안

0

73

1

마이크로서비스간 통신 시, 인증 처리

0

79

1

api gateway 에서 인증 처리

0

65

1

섹션 19 질문드립니다

0

53

1

강의 자료 업데이트

0

82

1

부하분산 강의 섹션

0

57

1

강의자료는 어디에서?

0

71

1

강의 자료는 어디서 다운 받을 수 있나요?

0

110

1

전체 사용자 조회시 오류

0

58

1

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

0

110

2

학습 방향

0

95

2

카프카 커넥터 사용 목적 문의

0

85

2

kafka 강의

0

108

2

서비스 디스커버리 종류

0

87

2

강의 자료에 대해서 궁금해요

0

116

2

GlobalFilter, LoggingFilter가 동작하지 않습니다.

0

90

2

Kafka Source Connect 버전 에러

0

85

2

소스커넥터는 사용안한 거 맞죠?

0

81

2

강의자료 업데이트 문의

0

95

2

강의에서 BCryptPasswordEncoder 에 역할(5-2)

0

56

1

강의 업데이트 계획이 궁금합니다.

0

112

2

MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)

0

161

2

어떤 것이 업데이트 된 건가요?

0

164

2