자료
- ClientRegistration
- ClientRegistrationRepository
OAuth2 서비스 변수 등록 방법
기존에 application.properties 변수 설정 파일에서 설정했던 소셜 로그인 제공 서비스에 대한 정보 기입을 관련 클래스를 통해 직접 진행하는 방법.
앞으로 커스텀을 진행하기 위해 클래스를 직접 구현하는 것이 필수적이다.
- ClientRegistration
- 서비스별 OAuth2 클라이언트의 등록 정보를 가지는 클래스다.
- ClientRegistrationRepository
- ClientRegistration의 저장소로 서비스별 ClientRegistration들을 가진다.
변수 설정 주석
application.properties에 설정한 oauth2 관련 변수를 모두 주석 처리한 뒤 아래 클래스를 작성한다.
ClientRegistration 생성
- oauth2 > ClientRegistration
@Component
public class SocialClientRegistration {
public ClientRegistration naverClientRegistration() {
return ClientRegistration.withRegistrationId("naver")
.clientId("aYeqdgT4WadN4okD5afW")
.clientSecret("sqS9lBIwcG")
.redirectUri("http://localhost:8080/login/oauth2/code/naver")
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
.scope("name", "email")
.authorizationUri("https://nid.naver.com/oauth2.0/authorize")
.tokenUri("https://nid.naver.com/oauth2.0/token")
.userInfoUri("https://openapi.naver.com/v1/nid/me")
.userNameAttributeName("response")
.build();
}
public ClientRegistration googleClientRegistration() {
return ClientRegistration.withRegistrationId("google")
.clientId("679593056062-cgk9s1tcl08f8616jtb436od97q2c1m7.apps.googleusercontent.com")
.clientSecret("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")
.redirectUri("http://localhost:8080/login/oauth2/code/google")
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
.scope("profile", "email")
.authorizationUri("https://accounts.google.com/o/oauth2/v2/auth")
.tokenUri("https://www.googleapis.com/oauth2/v4/token")
.jwkSetUri("https://www.googleapis.com/oauth2/v3/certs")
.issuerUri("https://accounts.google.com")
.userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo")
.userNameAttributeName(IdTokenClaimNames.SUB)
.build();
}
}
- oauth2 > ClientRegistrationRepository
@Configuration
public class CustomClientRegistrationRepo {
private final SocialClientRegistration socialClientRegistration;
public CustomClientRegistrationRepo(SocialClientRegistration socialClientRegistration) {
this.socialClientRegistration = socialClientRegistration;
}
public ClientRegistrationRepository clientRegistrationRepository() {
return new InMemoryClientRegistrationRepository(
socialClientRegistration.naverClientRegistration(),
socialClientRegistration.googleClientRegistration());
}
}
InMemoryClientRegistrationRepository 클래스를 사용하여 인메모리 방식으로 관리를 진행한다.
SecurityConfig 등록
- config > SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig {
private final CustomOAuth2UserService customOAuth2UserService;
private final CustomClientRegistrationRepo customClientRegistrationRepo;
public SecurityConfig(CustomOAuth2UserService customOAuth2UserService,
CustomClientRegistrationRepo customClientRegistrationRepo) {
this.customOAuth2UserService = customOAuth2UserService;
this.customClientRegistrationRepo = customClientRegistrationRepo;
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf((csrf) -> csrf.disable());
http
.formLogin((login) -> login.disable());
http
.httpBasic((basic) -> basic.disable());
http
.oauth2Login((oauth2) -> oauth2
.loginPage("/login")
.clientRegistrationRepository(
customClientRegistrationRepo.clientRegistrationRepository())
.userInfoEndpoint((userInfoEndpointConfig -> userInfoEndpointConfig
.userService(customOAuth2UserService))));
http
.authorizeHttpRequests((auth) -> auth
.requestMatchers("/", "/oauth2/**", "/login/**").permitAll()
.anyRequest().authenticated());
return http.build();
}
}
출처
https://www.devyummi.com/page?id=669290c5da93ce6bac3f20fd
'Spring Security > OAuth2' 카테고리의 다른 글
스프링 OAuth2 클라이언트 세션 14 : OAuth2LoginAuthenticationFilter (0) | 2025.01.09 |
---|---|
스프링 OAuth2 클라이언트 세션 13 : OAuth2AuthorizationRequestRedirectFilter (0) | 2025.01.09 |
스프링 OAuth2 클라이언트 세션 11 : 커스텀 로그인 페이지 (0) | 2025.01.09 |
스프링 OAuth2 클라이언트 세션 : 로그인 및 DB 저장 테스트 (0) | 2025.01.09 |
스프링 OAuth2 클라이언트 세션 10 : 유저 정보 DB 저장 (0) | 2025.01.09 |