SpringSecurity 및 JWT 강의를 보며 소셜로그인을 구현중이였다.
우선 강의 내용을 실습을 통해 구현해보고, 현재 진행 중이던 팀프로젝트에 적용하면서 생겼던 문제들을 분석하고 해결했던 과정을 기록하고자 한다.
구글,네이버,카카오등 클라이언트 정보등이 담긴 민감정보를 깃에 안올리면서 팀원들과 공유하는 방법이 필요
gitignore 파일에 yml 파일을 추가하여 Git에 포함되지 않도록 설정.
팀원 간 수동으로 yml 파일을 공유하고 로컬 환경에서 배포.
매번 수동으로 yml파일을 관리하는 것은 비효율 적으로 생각했고,우리 팀은 서브모듈을 활용하여 yml파일을 관리하는 private repository를 하나 개설하였다. 이 외에도 환경변수로 파일을 관리하는 방법등이 있다고 들어 추후 공부할 예정이다.
2개의 프로젝트에서 동일한 리디렉션 url을 설정 한다면, OAuth에서는 동일한 프로젝트로 인식하고 처리해주지 않을까 싶었던 것이 나의 생각이였다. 하지만 생각과 달리 에러가 발생하였고,
해당 이유를 추후에 공부하여 정리해야겠다.
.oauth2Login()
을 여러번 사용하여 해결하고자 했으나 에러가 발생하였다. [기존코드]
.oauth2Login(oauth -> oauth
.loginProcessingUrl("/login/oauth2/code/google") // 구글 로그인 URL 처리
.userInfoEndpoint(userinfo -> userinfo
.userService(principalOauth2UserService)))
.oauth2Login(oauth -> oauth
.loginProcessingUrl("/login/oauth2/code/naver") // 네이버 로그인 URL 처리
.userInfoEndpoint(userinfo -> userinfo
.userService(principalOauth2UserService)))
.oauth2Login(oauth -> oauth
.loginProcessingUrl("/login/oauth2/code/kakao") // 카카오 로그인 URL 처리
.userInfoEndpoint(userinfo -> userinfo
.userService(principalOauth2UserService)))
.oauth2Login()
메서드가 중복 호출될 때 발생하는 구성 충돌이라고 한다. Spring Security에서 .oauth2Login()은 OAuth2 로그인 흐름을 정의하는 메서드이다. 그러나 이 메서드는 한 번만 호출되어야 하고, 모든 OAuth2 프로바이더를 통합적으로 처리해야 한다.{registrationId}
를 사용하여 각 소셜 로그인에 맞게 처리하도록 했다. Spring Security는 {registrationId}
값을 자동으로 채워주기 때문에, 개별 로그인 경로를 지정할 필요는 없다. .oauth2Login(oauth -> oauth
.userInfoEndpoint(userinfo -> userinfo
.userService(principalOauth2UserService)) // PrincipalOauth2UserService 사용
// 각 소셜 로그인 경로에 대해 공통으로 처리
.loginProcessingUrl("/login/oauth2/code/{registrationId}") // Spring Security가 자동으로 {registrationId}에 해당하는 로그인 URL 처리
.defaultSuccessUrl("/home", true) // 로그인 후 리디렉션되는 페이지
)