OAuth 완벽하게 이해하기

dev park·2020년 6월 10일
5

용어 설명

  1. Client

    Resource Server 를 사용하는 주체. 내가 구현하게 될 어플리케이션

  2. Resource Owner

    Resource Server 에 인증되어 있는 사용자. 내가 구현한 어플리케이션을 사용 할 사용자

  3. Resource Server

    데이터를 가지고 있는 서버. Google, Facebook, Twitter

등록

내가 구현 할 어플리케이션(이하 Client)이 Resource Server 를 사용하기 위해서는 등록 이라는 절차를 거쳐야 한다. Facebook Developer, Google Developer 와 같은 사이트에서 진행한다.

등록 과정을 거치게 되면, ClientResource Server 는 아래 3가지를 공유하게 된다.

  • Client ID
    • 내가 구현 할 어플리케이션을 식별 할 수 있는 ID
  • Client Secret
    • 내가 구현 할 어플리케이션을 식별 할 수 있는 PW (절대, 코드에 노출되어지면 안되는 정보)
  • Authorized Redirect URL
    • Resource Server가 권한을 부여하는 과정에서 Authorized Code를 전달해 줄 경

인증

  1. Resource Owner는 Client를 통해 구글 캘린더를 이용하려고 한다면, Client는 Resource Owner 에게 인증화면은 전송한다.

  2. Sign in with Google 버튼을 클릭하게 되면 Resource 서버는 Resource Owner가 인증되어 있는지 확인하고 인증이 되어있지 않으면 로그인 화면을 전송한다.

  3. Resource Owner 가 로그인에 성공을 하면 Resource

  4. 로그인에 성공을 하면 Resource Server는 link 로 넘어온 client_id 의 값과 가지고 있던 Cliend ID 를 확인하고 맞다면 redirect URL 까지 확인하여 다음 작업으로 넘어간다.

  5. 다음 작업으로, Resource Server 는 Resource Owner 에게 Scope 를 확인 하는 창을 띄어준다. 여기서 Scope는 Client가 Resource Server 에서 사용할 자원들을 말한다.

  6. Resource Owner가 허용을 하게 되면, Resource 서버는 아래의 정보를 추가로 가지게 된다.

  • User ID : 1
    • Resouce Owner를 식별 할 수 있는 아이디
  • Scope : B,C
    • Resource Owner가 허락해 접근 할 수 있는 리소스 목록
  1. 이제 Resource Server 는 Authorization code 를 생성하고 header location 에 redirect URL 과 Authorization code 를 Resource Owner 전달한다. Resource Owner는 header 에 세팅되어 있는 location 에 의해 redirect URL 로 쥐도 새도 모르게 브라우저에 의해 redirect 된다.
  1. Resource Owner로 부터 authorization code 를 받은 Client는 아래 URL로 Resource Server 로 직접 접근하게 된다.

https://resource.server/token?grant_type=authorization_code&code=3&redirect_uri=https://client/callback&client_id=1&client_secret=2

  1. Resource Server 는 전달받은 code를 통해 client id, client secert, redirect uri 를 검사한다.

  2. 9 번의 절차가 끝나면 Resource Server accessToken 을 생성한다. 그리고 중복 인증을 피하기 위해 Authorization Code를 제거한다.

Refresh Token

accessToken의 수명을 그리 길지 못하다. 짧게는 1시간 길게는 몇일 정도로 설정되어 있다. accessToken의 수명이 모두 끝나면 더 이상 Resource Server에 접근 할 수 없게되고, 위의 1~10번의 과정을 다시 거쳐야 한다.

이 과정을 생략하기 위해 필요한 것이 Refresh Token 이다.

(출처: https://docs.wso2.com/display/IS530/Refresh+Token+Grant)

0개의 댓글