구글 콘솔 설정을 끝냈다.

이제 스프링 설정을 해보겠다.

Spring security 설정

1. build.gradle 설정

dependency 두 개를 추가해줘야한다.

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

2. application.yml 설정

# google
spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: ***
            client-secret: ***
            redirect-uri: http://localhost:8000/API/login/oauth2/code/google
            scope:
              - email
              - profile
              - openid

이렇게 설정을 하면 되는데 client-id, client-secret은 구글 설정에서 꼭 알고 있어야하는

이 것들을 넣으면 된다.

3. API client(Insomnia)로 호출해보기

나는 인섬니아를 쓰기 때문에 인섬니아에서 호출을 해보겠다.

위 사진처럼 적으면 된다.

AUTHORIZATION URL : https://accounts.google.com/o/oauth2/v2/auth
ACCESS TOKEN URL : https://www.googleapis.com/oauth2/v4/token

권한, 접근 토큰 URL들은 위 와 같이 쓰면 된다.

redirect url 은 각자의 포트번호와 주소에 맞게 적으면 된다.

scope는 구글 콘솔 설정에 맞게 email, profile, openid 이 세 개를 적는다.

혹시 모르니 세션을 깨끗하게 지우고

refresh token 버튼을 누르면

이렇게 구글로 로그인하는 창이 뜨게 된다!

4. 브라우저로 호출해보기

인섬니아가 아닌 브라우저로 호출을 하려면 spring 에 bean을 추가해야한다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class OAuth2ResourceServerConfiguration {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        http.authorizeHttpRequests(requests -> requests.anyRequest().authenticated());

        http.oauth2Login(Customizer.withDefaults());

        // http.oauth2Client(Customizer.withDefaults());

        return http.build();
    }
}

configuration 폴더를 하나 만들어서 위 클래스를 만들면 된다.

그리고 프로젝트를 실행하고 나서

아무 브라우저에 http://localhost:8000/API/ 를 주소창에 검색하면 위 사진과 같은 구글로 로그인하는 창이 뜨게 된다.

url 주소는 각자 다를 것이다. 나는 포트 번호를 8000으로 그리고 API를 추가해서 저렇게 주소로 되어있다.

계정을 선택하고 로그인을 하게 되면

이렇게 화면이 뜰 것이다. 왜냐하면 아직 로그인 후 처리를 하지 않았기 때문이다.

Bean 을 하나 추가하는 코드에서 주석처리 되어있는

` http.oauth2Client(Customizer.withDefaults()); `

이 부분은 서버에서 직접 로그인을 주최하는 것이 아니라 클라이언트가 하도록 던지는 방법이다.

아직 이 방법이 무엇인지는 알지 못한다. 알게 되면 후 게시글을 쓰겠다.

Comments