티스토리 뷰

E-commerce Application 개발을 계속 하던 중, 

코드를 올리기 보단 하는 방식을 올리는 편이 조금 더 효율적이라는 생각이 들었습니다. 

JWT는 쉽게 말하면 인증과정에 걸리는 비효율적인 과정들을 생략하고 JSON 형태의 토큰을 발행해서

조금 더 효율적인 인증과정을 밟도록 도움을 줍니다. 

 

JWT 생성에 앞서서 기존에 작성했던 User-Service에서 Dependency를 추가했습니다. 

(해당 프로젝트가 없는 경우엔 하단에 프로젝트를 받아주세요. 해당 프로젝트는 완성본이며,API-Gateway ServiceEureka 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 (로그인)

회원가입 후 로그인 진행 시 다음과 같이 토큰이 생성된 것을 볼 수 있습니다. 

이제 해당 토큰을 활용해서 다른 서비스에 접근하고, 권한을 부여할 수 있습니다.

이는 전통적인 방식에 비해 효율적이며, 여러 디바이스에서 사용 할 수 있다는 장점이 있습니다.

감사합니다.

 

 

아래에 해당 프로젝트를 공유합니다. 

 

userservice.7z
0.07MB

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함