inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

FeignClient 사용 ①

비대칭키 jwt 인증 문제

640

JUNI

작성한 질문수 22

0

http://localhost:8888/ecommerce/default 에서는

{

}

http://localhost:8888/user-service/default 에서는

{

}

 

이와 같이 token.secret이 같은데 왜 subject가 null값이 되는지 이유를 알 수 가 없습니다. login하고 나온 header값을 가지고 bearer에 넣어 인증하는 방식이 아닙니까?

이유를 잘 모르겠습니다.

 

JWT token is not valid

이게 왜 뜨는지

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

 

여기서 왜 null값으로 값을 반환하는지 이해를 할 수가 없습니다.

비대칭키 jwt spring-cloud spring-boot JPA architecture msa Kafka

답변 4

0

shkim

혹시 해결 하셨나요??

저도 토큰 복호화값 null 뜨길래 구글링 해보니

Jwts.parser()

이게 deprecated 되었다고 해서 gradle 버전

implementation io.jsonwebtoken:jjwt:0.9.1

을 아래 세개로 바꾸고 

implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'


Jwts.parser() -> Jwts.parserBuilder()
로 바꾸니 잘됩니다!!

 

 

0

JUNI

관련 내용에서 계속 안되서 질문 드립니다.

0

JUNI

env

ApplicationReactiveWebEnvironment {activeProfiles=[], defaultProfiles=[default], propertySources=[MapPropertySource {name='server.ports'}, BootstrapPropertySource {name='bootstrapProperties-configClient'}, BootstrapPropertySource {name='bootstrapProperties-file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\ecommerce.yml'}, ConfigurationPropertySourcesPropertySource {name='configurationProperties'}, MapPropertySource {name='springCloudBusOverridesProperties'}, MapPropertySource {name='gateway-properties'}, PropertiesPropertySource {name='systemProperties'}, OriginAwareSystemEnvironmentPropertySource {name='systemEnvironment'}, RandomValuePropertySource {name='random'}, CachedRandomPropertySource {name='cachedrandom'}, MapPropertySource {name='springCloudClientHostInfo'}, OriginTrackedMapPropertySource {name='Config resource 'class path resource [application.yml]' via location 'optional:classpath:/''}, MapPropertySource {name='spring.integration.poller'}, MapPropertySource {name='springCloudBusDefaultProperties'}, OriginTrackedMapPropertySource {name='Config resource 'class path resource [bootstrap.yml]' via location 'optional:classpath:/''}, MapPropertySource {name='springCloudDefaultProperties'}, {name='Management Server'}]}

 

propertySources

[MapPropertySource {name='server.ports'}, BootstrapPropertySource {name='bootstrapProperties-configClient'}, BootstrapPropertySource {name='bootstrapProperties-file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\ecommerce.yml'}, ConfigurationPropertySourcesPropertySource {name='configurationProperties'}, MapPropertySource {name='springCloudBusOverridesProperties'}, MapPropertySource {name='gateway-properties'}, PropertiesPropertySource {name='systemProperties'}, OriginAwareSystemEnvironmentPropertySource {name='systemEnvironment'}, RandomValuePropertySource {name='random'}, CachedRandomPropertySource {name='cachedrandom'}, MapPropertySource {name='springCloudClientHostInfo'}, OriginTrackedMapPropertySource {name='Config resource 'class path resource [application.yml]' via location 'optional:classpath:/''}, MapPropertySource {name='spring.integration.poller'}, MapPropertySource {name='springCloudBusDefaultProperties'}, OriginTrackedMapPropertySource {name='Config resource 'class path resource [bootstrap.yml]' via location 'optional:classpath:/''}, MapPropertySource {name='springCloudDefaultProperties'}, {name='Management Server'}]

 

user-service.yml

spring:

datasource:

url: jdbc:h2:mem:testdb

driver-class-name: org.h2.Driver

generate-unique-name: false

username: '{cipher}AQBZT1bZyyKdYnWBMbh5LSjRUV+5wt50pt9WClGg+hSu7ARkvke3ndRUX0zhI8GOCfn/bJUMS1wXKz/XjpPlILkarebYyMi7iE6czM0cNC3cj1ZsH2lyk2NVcfuWutAIUCxJutsPw4zx079JJ/Alg81ycnHewmBMWofVIfcn+RWkCwkANQkv/xljQUL2w9xLgFnpBAv2tL3fjwgfQBPFbJhg/711JYmZyP0vWIISlWhyj/IebG7DcJGA0HdTu2RMdiY7oy1sez7MyyOWue8AuwGF8ll6j4qNG/1bapmooF+c/O8SYSp4fV3IgBF1q9LHgsszl9dRfqlFiUYI/q0zHViG97gamN39Qm1/B8H9eyfz+KtWrgWQnLrlXCEsAxdg/8M='

token:

expiration_time: 864000000

secret: '{cipher}AQCwCy3C26G+3di+9nxOgu2Dvb0jKOagWvPFRcsoeL5wGwId5zdxovCE/UOmMzxfm0oTmzLBr2j9I1gJvZtMtZ27lwgHlRjnZKai0bxrP9QEk5Uvwxb7mzzIYwnyRjCynIPNmxO399rZNMnb7WtTLz61lj9Nc8e4ijUgA4HfT1n+No6pIYBX2HdO3DLFPHQmCedusFCwJ4QsFVHfV/XRnnE6+AM6Sfjh6+8t1N2UxNZYPygUr2aueY1tTaHgZ1iz4uh6zT0X74fdwOCcDNIfBWwTcDpQChP3KEtfqK8XpWr6uf4r4/47ZShThPAS4ZvwCqtQmfnTL8kpH5AA2G8DgEPyVSZy8eU4oJWc83ebv/Nrbr+CMhe513/OcQpMli1D2Y4='

gateway:

ip: 172.30.1.33

order_service:

url: http://order-service/order-service/%s/orders

exception:

order_is_empty: User's orders is empty

user-service => bootstrap.yml

spring:
  cloud:
    config:
      uri: http://localhost:8888
      name: user-service
#  profiles:
#    active: dev

ecommerce.yml

token:

expiration_time: 864000000

secret: '{cipher}AQCwCy3C26G+3di+9nxOgu2Dvb0jKOagWvPFRcsoeL5wGwId5zdxovCE/UOmMzxfm0oTmzLBr2j9I1gJvZtMtZ27lwgHlRjnZKai0bxrP9QEk5Uvwxb7mzzIYwnyRjCynIPNmxO399rZNMnb7WtTLz61lj9Nc8e4ijUgA4HfT1n+No6pIYBX2HdO3DLFPHQmCedusFCwJ4QsFVHfV/XRnnE6+AM6Sfjh6+8t1N2UxNZYPygUr2aueY1tTaHgZ1iz4uh6zT0X74fdwOCcDNIfBWwTcDpQChP3KEtfqK8XpWr6uf4r4/47ZShThPAS4ZvwCqtQmfnTL8kpH5AA2G8DgEPyVSZy8eU4oJWc83ebv/Nrbr+CMhe513/OcQpMli1D2Y4='

gateway:

ip: 172.30.1.33

 

apigateway-service => bootstrap.yml

spring:
  cloud:
    config:
      uri: http://localhost:8888
      name: ecommerce

0

Dowon Lee

안녕하세요, 이도원입니다.

Debugging을 통해 올려 주신 코드에서, 사용된 env.getProperty("token.secret")의 값을 확인해 보시 ㄹ수 있을 까요? 말씀하신 것처럼 Response header에 있는 토큰 값으로 Jwts.parser()를 진행하는 데, Invalid token이라는 오류가 발생하는 것으로 봐서는 잘못된 secret, body(토큰 내용), expiration_time 등이 오류인지라 디버깅을 통해 지정하신 설정값으로 실행되는 것인지 확인해 봐야 할 것 같습니다.

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

 

실행하고 있는 yml 파일 및 해당 애플리케이션의 콘솔로그(초반)도 같이 공유해 주시면, 어떤 설정 파일이 사용중인지 같이 확인해 보도록 하겠습니다.

감사합니다.

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

0

80

1

강의 교안

0

67

1

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

0

75

1

api gateway 에서 인증 처리

0

62

1

섹션 19 질문드립니다

0

50

1

강의 자료 업데이트

0

80

1

부하분산 강의 섹션

0

55

1

강의자료는 어디에서?

0

68

1

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

0

108

1

전체 사용자 조회시 오류

0

56

1

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

0

107

2

학습 방향

0

93

2

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

0

84

2

kafka 강의

0

104

2

서비스 디스커버리 종류

0

85

2

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

0

111

2

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

0

86

2

Kafka Source Connect 버전 에러

0

81

2

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

0

79

2

강의자료 업데이트 문의

0

93

2

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

0

55

1

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

0

109

2

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

0

160

2

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

0

160

2