ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • oauth 사용
    TIL 2021. 5. 2. 23:03

    이번 미션에서 사용한 oauth를 정리해봤다.

    많은 도움을 준 Nas에게 감사를 표한다.

     

    기본적인 흐름은

    1. gitbub에서 app을 만든다. (client_id, client_secret을 준다./ callbackurl 설정해야 함.))

    2. 리다이렉트를 통해 리소스 오너를 인증서버로 보내서 code를 얻어야 한다.

    3. 코드를 얻어서 리소스 서버에 액세스 토큰을 얻어야 한다.

    4. 액세스 토큰을 얻어서 리소스 서버에 원하는 정보를 요청한다.

     

    https://medium.com/@darinder.shokar/script-for-executing-the-oauth2-authorization-code-flow-in-forgerock-access-management-am-ddd8728586a5

     

     

    코드로 보면 다음과 같다.

    1. 개발자가 정의한 url로 사용자가 접속 -> git에서 제공해준 인증서버 url로 redirect 함(client_id와 callbackurl을 포함)

     

    2. 권한을 사용자가 승인하면 callbackUrl로 리다이렉트 됨 -> 인증 code를 쿼리 스트링으로 받아옴

     

    3. 받아온 code로 git에서 제공해주는 리소스 서버로 액세스 토큰을 요청함

     

    4. 액세스 토큰을 받아옴 -> 액세스 토큰으로 다시 git에서 제공해준 url로 정보를 요청함

     

     

     

    1. 2.

    인증 코드를 얻기 위해서 https://github.com/login/oauth/authorize

    git에서 제공하는 url뒤에 쿼리 스트링으로 clientId과 callbackUrl를 붙여 보내면 

    callbackUrl로 코드를 가지고 돌아온다.

     

    3.

    이제 code를 가지고 git에서 제공해준 url(https://github.com/login/oauth/access_token)로 json요청을 보내자.

    creaetHttpEntity는 request를 만들기만 한다.

    해더와 바디를 정의하면

    restTemplate로 리턴 받을 타입과 메서드를 정의해서 요청을 보낸다. 

    모든 조건이 만족하면 액세스 토큰을 돌려준다.

    PropertyNamingStrategy.SnakeCaseStrategy.class

    를 정의해준 이유는 http요청 간에 스네일 케스로 변경하기 위함이다.

    위를 정의하지 않으면 오브젝트 매퍼를 사용하지 않는 이상 컨버트 오류가 난다.

     

    4. 

    이제 액세스 토큰을 리턴 받았으니 https://api.github.com/

    git에서 제공해주는 url로 원하는 정보를 요청하면 된다. authorization에

    대부분 액세스 토큰은 bearer 타입이기에 타입을 잘 맞추고 요청하자.

    그럼 알맞게 정보가 제공된다. 

     

     

    미션에서 이후 과정은 

    제공받은 고유한 Id를 DB에 저장하고 Id를 포함한 jwt 토큰을 만들어 사용자에게 제공한다. ()

    나중에 접속 시

    인터셉터로 검사를 한다. jwt토큰이 없으면 1~4 과정을 겪고, 만약 토큰이 있다면 DB에 있는지 검사를 한다. 없으면 회원가입, 있으면 기존 회원이니 계속 진행.

     

    docs.github.com/en/developers/apps/authorizing-oauth-apps

     

    Authorizing OAuth Apps - GitHub Docs

    You can enable other users to authorize your OAuth App. GitHub's OAuth implementation supports the standard authorization code grant type and the OAuth 2.0 Device Authorization Grant for apps that don't have access to a web browser. If you want to skip aut

    docs.github.com

     

    'TIL' 카테고리의 다른 글

    2021.05.04~5 기록장  (0) 2021.05.03
    2021.05.03 기록장  (0) 2021.05.02
    2021.05.01~2 기록장  (0) 2021.04.30
    2021.04.30 기록장  (0) 2021.04.30
    2021.04.28~29 기록장  (0) 2021.04.27

    댓글

Designed by Tistory.