Spring Security 구글 로그인

바그다드·2023년 4월 3일
0

Spring Security

목록 보기
6/17
post-thumbnail

구글 API 활용 설정

  1. 구글 API에 접속
  2. 파란 박스 누르고 새 프로젝트 추가
  3. aouth동의 화면에 들어가 외부를 선택하고 필요한 자료 입력
  4. 사용자 인증정보에 들어가 oauth 클라이언트 id 선택

    이때 리다이렉션 URI는 아래와 같이 설정해야 하는데 oauth2라이브러리를 사용할 경우 '/login/oauth2/code'이 부분은 이대로 적어줘야 한다.(일종의 규칙이다) 이후에 google을 사용할거라면 '/login/oauth2/code/google'이런식으로 명시해주면 된다.

    이후 나오는 client id와 password를 따로 복사해두자

이렇게 설정을 하면 라이브러리에서 로그인 기능을 관리하기 때문에 따로 컨트롤러에 메서드를 만들지 않아도 된다!

oauth라이브러리를 사용한다면 url에도 규칙이 있는데
'/login/oauth2/code'까지는 고정으로 사용을 하고 api 종류에 따라
'/login/oauth2/code/google' 등이 붙는다.

  • 또한 '/login/oauth2/code' 이 주소에 대한 컨트롤러 메서드를 만들 필요 없이 라이브러리가 제어해준다.

라이브러리 추가

  • pom.xml에 oauth2를 추가해주자
		<!-- oauth 라이브러리 추가-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-oauth2-client</artifactId>
		</dependency>

application.properties 수정

spring.security.oauth2.client.registration.google.client-id=클라이언트id
spring.security.oauth2.client.registration.google.client-secret=클라이언트password
spring.security.oauth2.client.registration.google.scope=email,profile
spring.security.oauth2.client.registration.google.authorization-uri=/oauth2/authorization/google
  • 자꾸 에러가 발생하여 구글링을 했는데 다른 경우들만 나와 한참을 찾았다
  • 결론은 security....앞에 spring.security...처럼 spring을 명시해주면 된다.

loginForm.html 수정

  • 구글 로그인을 위한 링크를 만들어주자
...
</form>
<!--아래 a태그 추가-->
<a href="/oauth2/authorization/google">구글 로그인</a></br>
<a href="/joinForm">회원가입을 아직 하지 않으셨나요?</a>
</body>
...
  • 브라우저에서 a태그를 실제로 클릭해보면 아래와 같이 404에러가 뜰것이다.

SecurityConfig 수정

@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.authorizeRequests()
                .antMatchers("/user/**").authenticated()
                .antMatchers("/manager/**").access("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
                .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
                .anyRequest().permitAll()
                .and()
                .formLogin()
                .loginPage("/loginForm")
                .loginProcessingUrl("/login")
                .defaultSuccessUrl("/")
                // oauth2관련 설정 추가
                .and()
                .oauth2Login()
                .loginPage("/loginForm"); // 구글로그인 성공 이후에 후처리가 필요
        
        return http.build();
    }
  • 이렇게 설정하고 다시 a태그를 클릭해보자
  • 구글 로그인 api로 정상적으로 연결되었다.
  • 이제 로그인을 시도해 보자

    구글 로그인은 성공하였지만 구글로부터 받은 데이터 후처리가 되어있지 않기 때문에 에러가 발생하였다. 이제 이 데이터에 대한 후처리가 필요하다.
profile
꾸준히 하자!

0개의 댓글