ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot OAuth2 구글 소셜로그인 (네이버,카카오 등) (3) 예제
    Spring boot , 스프링 2023. 3. 3. 09:21
    반응형

    Spring Boot OAuth2 구글 소셜로그인 (네이버,카카오 등) (3) 예제

    1.애플리케이션을 실행하고 브라우저에서 http://localhost:8080/login 경로로 접속하여 로그인 페이지가 잘 나오는지 확인합니다. "Google Login" 버튼을 클릭하면 구글 로그인 페이지로 이동하게 됩니다.

    2.리다이렉트 URI 설정

    로그인 후 인증서버에서 인증 코드를 발급받은 후에는 다시 클라이언트 애플리케이션으로 리다이렉트해야 합니다. 이때 리다이렉트할 URI를 등록해야 합니다.

    Google Cloud Console에 가서 등록한 OAuth 클라이언트에서 "Authorized redirect URIs" 설정을 추가합니다.

    여기서 http://localhost:8080/login/oauth2/code/google는 스프링 부트에서 기본으로 제공하는 OAuth2 로그인 처리 URI입니다.

    3.사용자 정보 가져오기

    인증 코드를 받아온 후, 사용자 정보를 가져와야 합니다. 이를 위해서는 OAuth2UserService 인터페이스를 구현하여 사용자 정보를 가져오는 코드를 작성해야 합니다.

    3-1.사용자 정보 DTO 생성

    OAuth2UserService에서 반환되는 사용자 정보를 담을 DTO(Data Transfer Object)를 생성합니다.

    //java
    public class OAuth2UserInfo {
     
        private String id;
        private String name;
        private String email;
        private String imageUrl;
        private AuthenticationProvider provider;
     
        public OAuth2UserInfo(String id, String name, String email, String imageUrl, AuthenticationProvider provider) {
            this.id = id;
            this.name = name;
            this.email = email;
            this.imageUrl = imageUrl;
            this.provider = provider;
        }
     
        // Getters and Setters
    }

     

    3-2.OAuth2UserService 구현

    OAuth2UserService 인터페이스를 구현하여 사용자 정보를 가져오는 코드를 작성합니다.

    //java
    @Service
    public class CustomOAuth2UserService extends DefaultOAuth2UserService {
     
        @Override
        public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
            OAuth2User user = super.loadUser(userRequest);
     
            try {
                return processOAuth2User(userRequest, user);
            } catch (AuthenticationException ex) {
                throw ex;
            } catch (Exception ex) {
                // Throwing an instance of AuthenticationException will trigger the OAuth2AuthenticationFailureHandler
                throw new InternalAuthenticationServiceException(ex.getMessage(), ex.getCause());
            }
        }
     
        private OAuth2User processOAuth2User(OAuth2UserRequest userRequest, OAuth2User user) {
            AuthenticationProvider provider = AuthenticationProvider.GOOGLE;
     
            String id = user.getAttribute("sub");
            String name = user.getAttribute("name");
            String email = user.getAttribute("email");
            String imageUrl = user.getAttribute("picture");
     
            return new OAuth2UserInfo(id, name, email, imageUrl, provider);
        }
     
    }
    • @Service 어노테이션을 추가하여 스프링 서비스임을 명시합니다.
    • DefaultOAuth2UserService 클래스를 상속받아서 loadUser() 메소드를 오버라이드합니다.
    • processOAuth2User() 메소드에서 사용자 정보를 추출하여 OAuth2UserInfo 객체로 변환합니다.

     3-3.SecurityConfig 수정

    WebSecurityConfigurerAdapter 클래스를 상속받아서 configure() 메소드에서 OAuth2 로그인을 활성화하고 사용자 정보를 가져오는 CustomOAuth2UserService를 등록합니다.

    //java
    @Configuration
    @EnableWebSecurity
    반응형

    댓글

Designed by Tistory.