보안

[Spring Security in action] OAuth 2 실습해보기

bluesparrow 2024. 2. 4. 21:20

이 블로그는 개인의 공부 목적으로 작성된 블로그입니다. 왜곡된 정보가 포함되어 있을 수 있습니다.

 

실습환경: spring boot 3.xx

권한 부여 서버는 github의  OAuth app을 활용

클라이언트와 권한 부여 서버간의 연결 구현

 

https://docs.spring.io/spring-security/reference/servlet/oauth2/index.html

 

OAuth2 :: Spring Security

To get started, add the spring-security-oauth2-client dependency to your project. When using Spring Boot, add the following starter: OAuth2 Client with Spring Boot implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' org.springframew

docs.spring.io

Gradle 설정

implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

Config

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
        http
                .csrf(CsrfConfigurer::disable)
                .oauth2Login(c->{
                    c.clientRegistrationRepository(clientRegistrationRepository());
                })
                .authorizeHttpRequests(o->
                        o.anyRequest().authenticated())
                ;
        return http.build();
    }
    private ClientRegistration githubClientRegistration(){
        return CommonOAuth2Provider.GITHUB
                .getBuilder("github")
                .clientId("클라이언트ID")
                .clientSecret("클라이언트SECRET")
                .build();
    }
    @Bean
    public ClientRegistrationRepository clientRegistrationRepository(){
        ClientRegistration clientRegistration = githubClientRegistration();
        return new InMemoryClientRegistrationRepository(clientRegistration);
    }
}

oauth2Login 필터를 필터체인에 추가한후, 모든 요청에 대해서 인증하도록 설정

oauth2Login필터인 oauth2LoginAuthenticationFilter에서 권한 부여 서버 클라이언트 등록에 관한 정보를 가져오기 위해서 clientRegistrationRepository를 구현(UserDetailService에 유사한 방식) 메모리 저장 방식인 InMemoryClientRegistrationRepository 으로 등록

 

테스트

실행후 localhost:8080 에 접속해보자

 

성공!

 

리소스 서버 

방금까지는 사용자가 클라이언트를 통해 계정 접근을 할떄 권한 부여 서버를 통해 자격 증명을 요청하여 인증까지 진행했다면 이제부터는 인증 토큰 발급 및 리소스 서버를 통한 토근 관리에 대해 알아보자 (아래 flow 기준으로 Return Access Token까지 진행한 상태이다)