
자체 로그인 및 회원가입 기능 구현을 완료하고 구글 로그인을 적용하게 되었다
들어가기 전에 변명부터 하자면....
우리 서비스는 JWT를 통해 로그인이 필요한 페이지(각 유저의 대시보드 페이지)에 접근할 수 있다
구글 로그인을 도입하면서 많은 문제가 발생하게 되었다
원래 생각하던 로직은 Applicatioin과 Google Server간에 인증 코드를 요청하고, 인증 코드로 토큰을 요청하고, 그 토큰으로 API를 요청하는 것을 생각했다
하지만 스프링 시큐리티를 사용하면 기대했던 로직과는 다르게 그냥 바로 로그인 되어버린다
이 문제를 해결하기 위해 아직도 고군분투 중이다 (살려줘.....)

따라서 지금 작성하는 글은 그냥 스프링 시큐리티의 OAuth2 로그인을 어떻게 적용하였는가?에 대한 글이다
우선 구글 OAuth 서비스를 등록하였다
서비스를 등록하기 위해 Snacks 팀 계정을 생성하였다
내 계정을 사용해도 되지만, 그렇게 되면 사용자 지원 이메일은 나의 계정이 되기 때문이다
팀 생성일에 맞게 2022년생으로 가입을 하니 미성년자라고 부모님의 동의를 받아야 한단다
그래서 다시 내 생년월일로 가입을 하니..... 계속 안된다....!
이유인즉슨, 한번 미성년자로 가입을 해버리면 그 기기에서는 계속 미성년자라고 여겨진다고..
그래서 시크릿 모드로 들어가서 가입했다
1950년생으로.
SecurityConfig파일의 configure부분이다
oauth2Login을 사용하기 위해 다음과 같이 설정한 모습이다
customOAuth2UserService는 OAuth2 로그인 성공 시, 작업을 진행할 service이고,
defaultSuccessUrl은 OAuth2 로그인 성공 이후에 redirect 시킬 url이다
다음은 CustomOAuth2UserService의 loadUser부분이다
registrationId는 OAuth2의 이름을 담고있다 (ex) google, naver..)
userNameAttributeName은 OAuth2 로그인의 PK값이다
OAuth 에서 가져온 유저정보를 받아서 arributes 객체로 만들어 준다
생성된 attributes를 saveOrUpdate를 통해 Snacks DB에 저장한다
saveOrUpdate란 말 그대로 findByEmail을 통해 DB에 값이 없으면 값을 save한다
만일 구글 계정에서 계정의 이름, 프로필 사진을 바꾸는 경우가 있기에 Snacks DB에도 변경된 정보를 update한다
OAuthAttributes 파일은 OAuth정보를 담는 객체를 만드는 곳이다
of 메서드를 보면 지금은 구글 로그인밖에 사용하지 않아 바로 return ofGoogle을 하는데, 만일 다른 OAuth2 서비스를 이용할 경우 of 메소드에서 각 서비스에 따라 값을 넘겨준다
여기까지만 등록하면 http://localhost:8080/oauth2/authorization/google에 접근했을 때
다음과 같은 화면이 뜨면서 로그인이 이루어진다
구현하는 부분은 어렵지 않고 오히려 기존의 Entity를 변경하느라 시간이 많이 걸렸다
다만 정말 문제는 위에서 서술했듯이 어떻게 JWT와 연동하는가.....그것이 문제이다
화이팅......
'Project > Snacks' 카테고리의 다른 글
[Snacks 개발 일기] #6 구글 로그인정보를 통해 JWT 토큰 발급하기 (0) | 2022.12.12 |
---|---|
[Snacks 개발 일기] #5 테스트코드 MockMvc에 JWT 필터 적용하기 (0) | 2022.12.08 |
[Snacks 개발 일기] #3 filter에 Response값 지정하기 (0) | 2022.11.27 |
[Snacks 개발 일기] #2 ResponseEntity 적용하기 (0) | 2022.11.17 |
[Snacks 개발 일기] #1 Parameterized Test를 사용한 테스트 코드 (0) | 2022.11.16 |