ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Authorization Code Grant Code 분석
    OAuth2.0 2019. 10. 10. 22:29

    Spring social 로그인은 두가지 방법이 있다.
    1. "/connection/facebook" : Connect 방법은 타임라인에 글을 보거나 쓰는용도로 많이쓰인다.
    2. "/signin/facebook" : signin은 일반적으로 로그인을 구현할때 많이 사용된다.

    ## ProviderSignInController
    먼저 signin방식을 사용하기위해서 ProviderSignInController을 알아야한다.
    ProviderSignInController는 컨트롤러로 구성되어있다. /signin/{provider} (provider는 facebook/twitter etc)
    예를들어 /signin/facebook을 보내주게되면 컨트롤러에서 facebook에 맞는 인증처리 작업을 수행하게된다.


    ## SocialConfigurerAdapter or SocialConfigurer
    spring social 기본 설정을 해주는 클래스를 구현해줘야한다. 
    SocialConfigurerAdapter 추상클래스를 extends해서 사용해도 되고 SocialConfigurer interface를 구현해도 무방하다.


    ## ConnectionSignUp
    이 interface는 유저가 처음 로그인할때 어플리케이션(자신이 만들고있는)에 회원가입을 구현할수있는 곳이다.
    provider에서 로그인이 성공적으로 진행하면 Userconnection테이블에서 현재 페이스북으로 가입한유저가있는지 providerId,providerUserId 을통해 검색한다.
    만약 Userconnection테이블에서 유저 정보가 없다면 ConnectionSignUp의 execute(Connection<?> connection) 메소드가 호출된다.
    이메소드에서 provider에서 제공해주는 유저의 정보을 얻어 올수 있다. 
    첫번째 로그인이후에는 userconnection테이블에서 유저을 찾게되면 이메소드는 더이상 호출되지 않는다.

    -> 로그인후 table에 저장하는 용도

    ## SignInAdapter
    provider측에서 인증이 끝난후에 userconnection에 정보가 저장된후에 구현해야할 인터페이스이다.
    SignInAdapter의 signIn메소드는 어플리케이션의 로그인 로직을 구현하여 로그인 기능을 구현하면된다.

    -> 저장했으니간 자동 로그인같은거~

    ## SocialConfigurerAdapter 추상클래스 구현
    JdbcUsersConnectionRepository는 Userconnection테이블과 연결되어지는 spring social로부터 사용되어지는 DAO이다. 
    어플리케이션이 사용하는 데이터베이스를 연결하려면 필수로 datasource 등을 생성자로 넣어줘야한다. 첫번쨰로는 datasource을 2번째인자로는 provider들을 관리해주는 connectionFactoryLocator을 넣는다.
    3번째로는 암호화방식을 넣어준다. Encryptors.noOpText()로 설정하게되면 평문으로 디비에 정보가 저장된다.
    만약 provider들을 더 추가하고싶은면 addConnectionFactories 메소드를 추가해서 오버라이딩해서 provider들을 추가해주면 된다. 
    솔직히 전체적인 로직을 추가하면 provider들을 추가하는건 어렵지않다.

    @Repository
    interface UserRepository : JpaRepository<User, Long> {
    
        fun findByUsername(username: String): User
    }



    ## ConnectionSignUp 인터페이스 구현
    회원가입처리가 끝나고 밑에 로그인 어댑터를 실행하게된다.
    security를 사용하면 security로그인처리를 하면되고, 아니라면 아래와같이 로그인 처리를 하면된다.


    ## SignInAdapter 인터페이스 구현



    ## 결론
    SocialConfigurerAdapter을 통해 기본 spring-social 설정
    ConnectionSignUp 회원가입 구현
    SignInAdapter 웹어플리케이션 로그인 구현

    'OAuth2.0' 카테고리의 다른 글

    OAuth2.0 SNS Login (Authorization Code Grant)  (0) 2019.10.10

    댓글

Designed by Tistory.