본문 바로가기
TIL

TIL내일배움캠프 10주차 다시 OAuth2

by 율량동박씨 2024. 6. 21.

오늘의 키워드

  • OAuth2
  • Password Encoder
  • ClientRegistrationRepository

오늘의 내용

  • Spring Security와 OAuth2:
    오늘은 Spring Security를 활용해 OAuth2 소셜 로그인 기능을 구현했다. 특히, 구글, 네이버, 카카오와 같은 소셜 로그인 기능을 추가하면서 클라이언트 등록과 인증 매니저 설정 등을 진행했다.
  • Password Encoder 설정:
    프로젝트 내에서 비밀번호 인코딩을 위해 BCryptPasswordEncoder를 사용했다. 그러나 동일한 빈 이름(passwordEncoder)이 두 번 정의되어 충돌이 발생했다. 이를 해결하기 위해 한 곳에서만 빈을 정의하도록 수정했다. WebSecurityConfig에서 passwordEncoder 빈을 정의하고 AppConfig에서는 해당 정의를 제거했다.
@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}
  • ClientRegistrationRepository 설정:
    소셜 로그인 기능을 위해 ClientRegistrationRepository와 OAuth2AuthorizedClientManager 빈을 설정했다. Spring Security 6에서는 이를 직접 빈으로 등록해주어야 했다. 설정이 누락되면 ClientRegistrationRepository 타입의 빈을 찾을 수 없다는 에러가 발생하기 때문이다.
@Bean
public ClientRegistrationRepository clientRegistrationRepository() {
    return new InMemoryClientRegistrationRepository();
}

@Bean
public OAuth2AuthorizedClientManager authorizedClientManager(
        ClientRegistrationRepository clientRegistrationRepository,
        OAuth2AuthorizedClientRepository authorizedClientRepository) {
    DefaultOAuth2AuthorizedClientManager authorizedClientManager = new DefaultOAuth2AuthorizedClientManager(
            clientRegistrationRepository, authorizedClientRepository);
    return authorizedClientManager;
}

 

프로젝트 설정과 문제 해결:

  1. application.properties 파일에서 OAuth 클라이언트 설정을 추가했다. 각 소셜 로그인 제공자의 클라이언트 ID와 비밀 키를 설정했다.
  2. WebSecurityConfig에서 SecurityFilterChain을 설정하여 다양한 경로에 대한 접근 권한을 설정했다. OAuth2 로그인과 JWT 인증 필터를 추가했다.

오늘의 회고

소셜 로그인 기능을 구현하면서 이 방법 저 방법 사용중에 있지만 아직 문제를 해결하지 못해서 아마 주말에 해결해야 할 거 같다. 처음엔 몸이 적응을 못해서 잠도 일찍 잘 오고 했지만 이제 몸이 적응을 해서 그런가 다시 약을 먹어야 새벽 3시는 돼서 간신히 잠드는 거 같다. 흠 이래서 이 여름을 끝까지 버틸 수 있을지.....🤮🤮🤮🤮