Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

JAN's History

OAuth2 로그인 - 페이스북 개발자 센터로 페이스북 연동 로그인하기 2탄 본문

스프링

OAuth2 로그인 - 페이스북 개발자 센터로 페이스북 연동 로그인하기 2탄

JANNNNNN 2024. 6. 3. 14:34

1.OAuth2 로그인을 위한 세팅

1.1 SecurityConfig.java에 설정 세팅하기

  • oauth2Login()  : 우리가 설정한 joinForm에서 form 로그인이 아닌 OAuth2 로그인도 인정해준다.
  • userInfoEndpoint() : 해당 회사에서 인증이 완료가 된다면, 인증 코드가 아닌 회원정보로 받는다는 의미이다.
    • OAuth2를 이용하면 인증 코드(=토큰)으로 받지 않아도 바로 scope로 정해진 정보를 받을 수있기 때문!
  • userService() : 해당 로직을 실행시키고 데이터를 받을 서비스를 지정하는 영역이다.

➡️ userService() 에는 응답받는 타입이 정해져있으므로, 그 타입에 맞게 이 부분을 만들러 가보자!

1.2 OAuth2DetailsService.java 파일 세팅하기

@Service
public class OAuth2DetailsService extends DefaultOAuth2UserService {
    @Override
    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
        System.out.println("oauth2 서비스 탐");
        OAuth2User oAuth2User = super.loadUser(userRequest);
        System.out.println(oAuth2User.getAttributes());
        return null;
    }
}

userService()에서 받을 수 있는 타입인 DefaultOAuth2UserService를 extends한다!

그리고 주입받을 수 있도록 IoC등록을 위해 @Service를 걸어준다.

이후 SecurityConfig에서 DI해준다.

private final OAuth2DetailsService oAuth2DetailsService;

2. javaScript 수정

2.1 로그인 폼 onclick추가

  • onclick= "javascript:location.href='/oauth2/authorization/[플랫폼이름]'" 는 oauth2를 사용할 때 필요한 문법입니다!

  • [플랫폼이름]은 그때 yml파일에 채워넣었던 플랫폼입니다!

3. 페이스북 로그인

그리고 이제 페이스북 로그인 버튼을 클릭하면 facebook으로 로그인이 됩니다

+ 페이스북 개발자 센터로 로그인이 이미 되어있는 경우는 그 페이지에서 로그아웃하고 다시 들어오면 위와같은 창이 나옵니다

그리고 동의하기를 계속 누르다보면 에러페이지가 뜨는데 일단 무시해도 됩니다!

에러가 터지는 이유는 OAuth2DetailsService에서 응답받는 회원정보를 처리할 로직을 아직 만들지 않았기 때문이에요.

우선 그 전에 페이스북 인증 정보가 OAuth2DetailsService에 잘 전달되는지를 확인해보겠습니다.

4. loadUser 오버라이딩

@Service
public class OAuth2DetailsService extends DefaultOAuth2UserService {
    @Override
    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
        System.out.println("oauth2 서비스 탐");
        OAuth2User oAuth2User = super.loadUser(userRequest);
        System.out.println(oAuth2User.getAttributes());
        return null;
    }
}

loadUser는 페이스북이 응답해준 회원정보를 받는 함수입니다.

loadUser함수 내부에는 userRequest가 있는데 userRequest에는 회원정보가 직접적으로 담기는 함수입니다.

그래서 String으로 날아온 데이터를 super로 파싱해서 받고, 출력해 확인해보면?

이렇게 잘 값을 받아온다는 것을 확인할 수 있습니다.