스프링 OAuth2 클라이언트 세션 12 : ClientRegistration

2025. 1. 9. 17:37·Spring Security/OAuth2

자료

  • ClientRegistration
    • https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/oauth2/client/registration/ClientRegistration.html
  • ClientRegistrationRepository
    • https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/oauth2/client/registration/ClientRegistrationRepository.html

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

 

개발자 유미 | 커뮤니티

 

www.devyummi.com

 

'Spring Security > OAuth2' 카테고리의 다른 글

스프링 OAuth2 클라이언트 세션 14 : OAuth2LoginAuthenticationFilter  (1) 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
'Spring Security/OAuth2' 카테고리의 다른 글
  • 스프링 OAuth2 클라이언트 세션 14 : OAuth2LoginAuthenticationFilter
  • 스프링 OAuth2 클라이언트 세션 13 : OAuth2AuthorizationRequestRedirectFilter
  • 스프링 OAuth2 클라이언트 세션 11 : 커스텀 로그인 페이지
  • 스프링 OAuth2 클라이언트 세션 : 로그인 및 DB 저장 테스트
jhyngu
jhyngu
취업하자.
    티스토리 홈
    |
  • jhyngu
    jhyngu
    jhyngu
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • Dev (151)
      • Java (2)
      • Spring (51)
      • Spring Security (39)
        • JWT (22)
        • OAuth2 (17)
      • Kotlin (2)
      • React (6)
      • Coding Test (28)
      • DB (0)
      • Git (5)
      • Linux (14)
      • docker (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MariaDB
    api client
    Spring
    Spring Boot
    JavaScript
    백준
    Spring Framework
    Linux
    OAuth2
    spring web
    Spring Security
    JWT
    알고리즘
    oauth2
    JDBC
    git
    mybatis
    MVC
    react
    Postman
  • hELLO· Designed By정상우.v4.10.3
jhyngu
스프링 OAuth2 클라이언트 세션 12 : ClientRegistration
상단으로

티스토리툴바