Spring Security

[OAuth] 구글 로그인 준비

ewok 2023. 3. 26. 14:41

https://console.cloud.google.com/

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

구글 콘솔로 가서 새 프로젝트를 만든다.

 

 

 

 

 

 

구글 로그인을 하게 되면 구글에서 우리 페이지로 인증 코드를 넘겨준다. 이 코드를 가지고 액세스 토큰을 구글에 요청한다. 그리고 액세스 토큰을 받아서 사용자 대신 우리가 구글로부터 사용자의 정보에 접근할 수 있는 권한이 생긴다.

 

액세스 토큰을 얻기 위한 인증 코드를 받을 주소가 리디렉션 URI이다.

 

스프링 시큐리티에서 /login/oauth2/code는 고정된 값이다. (OAuthClient 라이브러리)

 

생성이 완료되면 클라이언트 ID와 클라이언트 보안 비밀번호가 나온다. 비밀번호는 노출되면 안 된다. 이 ID와 비밀번호를 application.properties에서 사용해야 한다.

 

 

의존성 추가

build.gradle

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

 

application.properties

spring.security.oauth2.client.registration.google.client-id=클라이언트 ID
spring.security.oauth2.client.registration.google.client-secret=클라이언트 보안 비밀번호
spring.security.oauth2.client.registration.google.scope=email,profile

만약 깃허브에 올릴거라면 노출이 되면 안되니 위 코드는 별도 프로필을 만들어 그 properties파일을 .gitignore에 추가해야 한다.

 

나는 application-oauth.properties를 만들고 application.properties에

# 깃허브에 올라가지 않게 oauth 프로필로 만듦
spring.profiles.include=oauth

이렇게 oauth 프로필을 include했다.

 

scope는 OAuth 동의 화면에서 볼 수 있고

 

여기서도 볼 수 있다.

https://developers.google.com/identity/protocols/oauth2/scopes?hl=ko&authuser=1 

 

Google API의 OAuth 2.0 범위  |  Authorization  |  Google Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 Google API의 OAuth 2.0 범위 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이

developers.google.com

 

loginForm.html

	...
</form>
<a href="/oauth2/authorization/google">구글 로그인</a>
<a href="/joinForm">회원가입을 아직 하지 않으셨나요?</a>
</body>
</html>

구글 로그인 주소도 정해진 값이다. /oauth2/authorization

구글 로그인을 클릭해보면

404가 뜨는 이유는 아직 매핑을 하지 않아서이다.

 

SecurityConfig

            .formLogin().loginPage("/loginForm")
            .loginProcessingUrl("/login")
            .defaultSuccessUrl("/")
            .and()
            .oauth2Login()
            .loginPage("/loginForm");

    return http.build();
}

 

이제 구글 로그인을 클릭하면

 

그런데

/manager로 접속하면 로그인 페이지로 오게 된다.

여기서 구글 로그인을 하면

403 에러가 뜬다. 이것은 구글 로그인이 완료된 후 후처리가 필요한데, 그 작업을 하지 않았기 때문이다.

 

  1. 코드를 받은 후(인증) 이를 통해
  2. 액세스 토큰(권한)을 발급받는다.
  3. 이제 우리 서비스가 구글 로그인한 사용자의 정보에 접근할 수 있게 된다.
  4. 그러면 사용자 프로필 정보를 가져올 수 있고
  5. 가져온 정보를 토대로 작업을 할 수 있다.
    • 회원가입을 자동으로 진행
    • 가져온 정보 외에 추가적인 정보(쇼핑몰의 경우 주소 등)가 필요하다면 추가적인 회원가입 창을 통해 회원가입을 진행

 

구글 로그인이 완료되면 코드를 받는 것이 아니라 액세스 토큰과 사용자 프로필 정보를 함께 받게 된다.