Skip to content

MoonDooo/authentication_server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring Security를 이용한 OAuth2 인증 및 JWT 발급

Spring security을 활용하여 travel plan 프로젝트에 필요한 사용자 로그인 및 인증을 구현한 프로젝트입니다. 사용자의 회원 가입 및 로그인은 OAUTH2를 이용합니다. OAUTH2는 흔히 볼 수 있는 소셜 로그인으로서 사용자에게 편리하게 가입할 수 있도록 지원합니다. 이 프로젝트는 현재 naver를 이용한 로그인을 지원하고 있습니다. 사용자는 OAUTH2을 통해 회원 가입 후 JWT를 발급 받으며 해당 JWT를 관리하기 위한 블랙 리스트, 갱신 등을 구현했습니다.

OAUTH2LOGIN

Spring security OAUTH2 LOGIN 구조

image

Spring Security OAuth2 Login

스프링 시큐리티는 굉장히 쉽게 OAUTH2를 구현할 수 있도록 되어있다. 다만 요구사항으로 IOS와 통신하기 때문에 REST API에 맞게 구현할 필요가 있었다. 스프링 시큐리티는 사용자가 인증해야 하는 uri를 생성하여 리다이렉트한다. 또한 해당 사용자의 요청 정보를 임시적으로 저장하는 곳에서 세션을 사용한다. 따라서 해당 부분을 적절히 커스텀했다.

JWT 발급

OAuth2 인증이 끝나면 사용자 정보를 데이터베이스에 저장해 회원가입하고 JWT를 발급한다. 접근 토큰과 리프레시 토큰을 발급하고 있으며, 리프레시 토큰까지 만료되면 다시 OAuth2 인증이 필요하다. 발급된 jwt는 travel_plan 서비스에서 Header에 넣어 요청하게 되며 travel_planJwtAuthenticationFilter를 통해 이 프로젝트의 서버로 jwt를 전송하여 검증 받고 sub 즉 데이터베이스 상의 user id를 얻는다.

JWT 인증 및 관리

발급된 JWT는 travel_plan에서 사용되어 이 프로젝트 서버로 restTemplate를 사용하여 전달 받는다. 전달 받은 JWT는 JwtAuthenticationFilter에서 검증하여 데이터베이스 상의 id를 가져온다. 이때 travel_plan 프로젝트의 서버에 해당 user의 id가 데이터베이스에 없다면 id를 저장한다. 즉 travel_planauthentication_server에서의 user에 id만을 저장하며 사용자로부터 추가적으로 nicknameprofileImg만 저장한다. 또한 로그아웃 기능을 지원하기 위해서 jwt 블랙리스트 필터인 JwtBlackListFilter와 토큰을 갱신하기 위한 JwtRefreshFilter를 필터로 추가했다.

About

travel_plan을 위한 oauth2 인증 서버

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages