티스토리 뷰
E-commerce Application 개발을 계속 하던 중,
코드를 올리기 보단 하는 방식을 올리는 편이 조금 더 효율적이라는 생각이 들었습니다.
JWT는 쉽게 말하면 인증과정에 걸리는 비효율적인 과정들을 생략하고 JSON 형태의 토큰을 발행해서
조금 더 효율적인 인증과정을 밟도록 도움을 줍니다.
JWT 생성에 앞서서 기존에 작성했던 User-Service에서 Dependency를 추가했습니다.
(해당 프로젝트가 없는 경우엔 하단에 프로젝트를 받아주세요. 해당 프로젝트는 완성본이며,API-Gateway Service와 Eureka Server가 있어야 원활하게 동작합니다.)
#pom.xml
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
이름에서도 알 수 있듯이 jwt 생성을 위해 필수적으로 주입해줘야하는 Dependency 입니다.
이제 token의 설정을 위해서 application.yml 파일을 수정해줍니다.
#application.yml
token:
expiration_time: 86400000
secret: ggpark_token
token: 레벨로 시작을 해서 expiration_time과 secret를 입력해주세요.
expiration_time은 토큰의 유효기간입니다. 해당 시간이 지나면 파기되는 구조인데, 해당 시간은 1000ms입니다.
즉 60 x 60 x 24 = 86400초 ( 하루 ) 에 1000을 곱하면 86400000ms 인셈인데 딱 24시간 후에 토큰을 파괴할 예정입니다.
secret는 토큰의 이름입니다. 자유롭게 설정하셔도 됩니다. 해당 값을 입력하면 이제 토큰을 발급할 준비는 마쳤습니다.
기존에 만들어둔 AuthenticationFilter.class 에서 해당 토큰의 값을 채워줄 수 있습니다.
기존에 사용한 successfulAuthentication을 아래와 같이 수정합니다.
@Override
protected void successfulAuthentication(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain,
Authentication authResult) throws IOException, ServletException {
String userName = ((User)authResult.getPrincipal()).getUsername();
UserDto userDetails = userService.getUserDetailsByEmail(userName);
String token = Jwts.builder()
.setSubject(userDetails.getUserId())
.setExpiration(new Date(System.currentTimeMillis() + Long.parseLong(env.getProperty("token.expiration_time"))))
.signWith(SignatureAlgorithm.HS512, env.getProperty("token.secret"))
.compact();
response.addHeader("token",token);
response.addHeader("userId", userDetails.getUserId());
}
그럼 인증에 성공 시 자동으로 Jwt토큰을 발급하게 됩니다.
#Test case (회원등록)
#Test case (로그인)
회원가입 후 로그인 진행 시 다음과 같이 토큰이 생성된 것을 볼 수 있습니다.
이제 해당 토큰을 활용해서 다른 서비스에 접근하고, 권한을 부여할 수 있습니다.
이는 전통적인 방식에 비해 효율적이며, 여러 디바이스에서 사용 할 수 있다는 장점이 있습니다.
감사합니다.
아래에 해당 프로젝트를 공유합니다.
'웹 프로그래밍 > MSA 학개론' 카테고리의 다른 글
[MSA] Spring Cloud Config 핥아먹기 (0) | 2022.04.21 |
---|---|
[MSA] JWT 토큰을 활용한 인증 (0) | 2022.04.21 |
[MSA] 잠시 쉬어가는 MSA (RewritePath) (0) | 2022.04.19 |
[MSA] Spring Cloud로 개발하는 E-commerce 마이크로 서비스 어플리케이션(Orders) - 7 - (0) | 2022.04.19 |
[MSA] Spring Cloud로 개발하는 E-commerce 마이크로 서비스 어플리케이션(Catalogs) - 6 - (0) | 2022.04.18 |
- Total
- Today
- Yesterday
- Feign
- LoadBalancer
- producer
- elasticSearch
- zipkin
- 오늘저녁 삼겹살
- Logstash to ElasticSearch
- 운동
- springcloud
- Logstash 활용
- Kafka Connect
- MSA
- docker
- Gateway
- MariaDB
- 빅-오
- Spring + ELK
- UserService
- 미래의나에게동기부여
- JWT
- kafka
- ACTUATOR
- github
- rabbitmq
- git
- prometheus
- consumer
- config
- 운동일기
- 루틴기록
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |