ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OAuth 2 요약
    oauth2 2022. 2. 4. 00:18

    OAuth2 는 생활 코딩의 OAuth 2.0 설명이 가장 잘 되어 있고 적극 추천한다. 동영상을 보면서 이해한 부분을 정리한다.

     

    용어

    용어가 혼동되지 않도록 잘 구분해야 한다.  

    • Client: 내가 운영하는 사이트 (예: https://my.site)
    • Resource Server: 내 사이트에서 이용할려는 외부 서비스 (예: facebook login)
    • Resource Owner: 내 사이트에 접속해 외부 서비스를 이용할려는 사용자

     

    편의상 내가 운영 관리하는 Site 를 Client 로 생각하자. 우리(?)는 보통 Site 개발자니 설명은 Client 중심으로 한다.

    등록

    어떤 사용자가 내 사이트에 로그인 후 생성한 컨텐츠를 Resource Server (facebook) 에 업로드하고 싶어한다고 상상하자. Client(내 사이트) 에서 Resource Server(facebook) 의 기능을 쓰기 위해서는 등록 과정이 필요하다.

    • Client 가 Resource Server 에 등록 신청을 하면, Resource Server 에서는 Client Id, Client Secret 을 발급해 준다.
    • Client 는 Resource Server 에 이용 등록 신청할 때 Redirect URL 정보도 남겨야 한다. (나중에 Resource Server 에서 남겨놓은 Redirect URL 로 redirect 호출해 준다.)

    Resource Owner 승인

    Resource Owner 가 내 사이트에서 만든 컨텐츠를 facebook 에 업로드 하려고 한다면..

    • 내 사이트에서는 Resource Server 로 갈 수 있는 Link 를 Resource Owner 에게 제공한다. Link 는 아래와 같은 형태가 될 것이다. scope 은 우리가 Resource Server 에서 사용할 기능(업로드 같은..)을 의미한다.
    https://facebook.com/?client_id=1&scope=B,C&redirect_uri=https://my.site/callback
    • Resource Owner 는 (로그인이 안된 상태라면) 자기 facebook 계정으로 로그인한다.
    • 로그인이 성공하면 Resource Server 은 Client 에서 URL 로 요청한 client_id, redirect_uri 정보가 일치하는지 확인한다.
    • client_id, redirect_uri 정보가 일치하면 Resource Server 는 scope 으로 요청한 권한(B, C)을 Client 에게 부여해도 괜찮을지 Resource Owner 에게 물어보는 화면을 제공한다.
    • Resource Owner 가 Client 에게 권한 부여를 승인하면, Resource Owner 가 해당 scope 의 권한을 Client 에게 허용하였다는 정보가 Resource Server 에 남게된다.

    Resource Server 승인

    Resource Owner 가 승인했으니, Resource Server 에서 Client 에 바로 accessToken 을 발급해주면 좋을테지만.. 바로 이렇게 하지는 않고..

    • Resource Server 에서는 Resource Owner 의 웹 브라우저에게 authorization code (임시 비밀번호) 정보가 담긴 URL 을 전송한다.
    Location: https://my.site/callback?code=3
    • Resource Owner 의 웹 브라우저는 https://my.site/callback?code=3 으로 이동한다.
    • 이제 Client 도 authorization code=3 을 알게 된다. Client 는 Client Secret, authorization code 정보 등을 담아 Resource Server 에 직접 접속해 accessToken 을 요청한다.
    https://facebook.com/token?grant_type=authorization_code&code=3&client_secret=2&client_id=1&redirect_uri=https://my.site/callback

    AccessToken 발급

    • Resource Server 는 Client 가 보낸 정보(authorization_code, Client Secret, ...) 가 일치하면 accessToken 을 발급해 준다. 이때 임시 비밀번호로 사용했던 authorization code 정보는 삭제하고 accessToken 정보를 Resource Server 에 남긴다.
    • 이제 Client 는 facebook user_id:1 에 대해 B,C scope 을 이용할 수 있는 accessToken 을 확보했다. 

    API 호출

    위에서 확보한 accessToken 을 이용해 Resource Server 에서 제공하는 API 를 사용할 수 있다.

    Http request header  Authorization 에 accessToken 정보를 넣어 요청한다.

    Authorization : Bearer AAAARqmfmHJ8bZ2435wePZA4...

    댓글

Designed by Tistory.