본문 바로가기

Develop

OAuth

사용자가 웹사이트나 애플리케이션의 접근 권한을 얻기 위해, 비밀번호를 제공하는 대신 타 웹사이트 상의 자신들의 정보를 사용하도록 하는 것이다.

 

예를 들면 Kakao, Naver, Google, Facebook 등의 계정으로 어떤 임의의 타 서비스에 로그인하는 것이 있다.

 

OAuth는 무엇이 좋은가?

사용자 입장에서는

  • 서비스마다 각각의 계정을 관리할 필요가 없다. 하나의 로그인으로 여러 서비스를 사용할 수 있다.
  • 서비스의 보안을 더 신뢰할 수 있다.
  • 개인 정보 노출을 최소화하거나 관리할 수 있다.

서비스 입장에서는

  • 회원의 계정정보 관리에 많은 노력을 기울이지 않아도 된다.
  • 사용자 획득 가능성이 높아진다.

OAuth API를 제공하는 서비스 입장에서는

  • 자기 서비스에 대한 서드파티 애플리케이션 개발을 허용할 수 있다.
  • 사용자에 대한 추가 정보를 알 수 있다. (어떤 유형의 서비스를 사용하는지 등)
  • 사실상의 서비스 광고(?)도 될 것이다.

 

OAuth는 어떻게 동작하는가?

OAuth 인증방식은 약간 복잡하다. UOSTime이 카카오 계정으로 로그인을 지원한다고 예를 들어보자.

 

사용자의 로그인 과정을 아주 간단히 요약하면 다음과 같다.

  1. 사용자가 카카오 로그인을 수행한다.
  2. 카카오가 UOSTime에게 사용자 정보를 제공한다.

 

너무 요약한 나머지 부족한 부분이 많다.

카카오는 사용자 정보를 UOSTime에 줘야 한다는 사실을 어떻게 알까? 위 과정을 조금만 더 자세히 하면 다음과 같다.

  1. UOSTime이 사용자를 카카오로 이동시킨다.
    1. 이때, 로그인을 끝내면 카카오로 다시 돌아오라고 redirect URI를 메모해둔다.
  2. 사용자가 카카오 로그인을 수행한다.
  3. 카카오는 메모(redirect URI)에 따라 사용자를 UOSTime으로 이동시킨다.
  4. UOSTime은 카카오에게 사용자 정보를 요청한다.
  5. 카카오가 UOSTime에게 사용자 정보를 제공한다.

 

하지만, 로그인을 끝내고 다시 돌아오는 곳이 UOSTime이라는 것을 보장하려면 어떻게 해야 할까?

UOSTime이 사전에 카카오에게 자신의 정보를 등록해놓아야 한다.

  1. UOSTime은 카카오에게 OAuth API 사용 신청을 한다. 이때 redirect URI도 제출한다.
  2. 카카오는 UOSTime에게 요청토큰과 비밀키를 발급한다.
  3. UOSTime은 앞으로 사용자를 카카오로 이동시킬 때 redirecr URI 뿐만 아니라 요청토큰도 함께 보낸다.
  4. 사용자가 로그인 하면, 카카오는 사용자를 다시 UOSTime으로 되돌려 보낼 때 인증코드를 함께 보낸다.
  5. UOSTime은 요청토큰, 비밀키, 인증코드, redirect URI를 카카오에 제출함으로써 자신의 신원을 보증한다.
  6. 카카오는 UOSTime의 요청에 따라 UOSTime에게 사용자 정보를 제공한다.

 

여기서, '사용자 정보를 제공한다'는 부분은 사실 더 세부적으로 들어가야 한다. 카카오가 UOSTime에게 사용자의 모든 정보를 제공하는 것은 아니다. 그리고 정보 제공뿐만 아니라 카카오에게 무언가 액션을 요청할 수도 있다.

  1. 사용자는 카카오 로그인 과정에서, 카카오가 UOSTime에게 어떤 권한을 제공할지 선택/확인할 수 있다.
  2. UOSTime은 사용자가 사전에 허용한 범위 내에서 카카오에게 정보/액션 등을 요청한다.

 

정리

위 내용을 정리하고 더 자세히 적은 내용은 다음과 같다(구체적인 방법은 다를 수 있지만, 큰 맥락에서는 같다).

  1. UOSTime은 카카오 로그인 기능을 제공하기 위해, 아래와 같이 사전 작업을 해두어야 한다.
    1. UOSTime은 카카오에게 OAuth API 사용 신청을 한다. 이때 redirect URI도 제출한다.
    2. 카카오는 UOSTime에게 요청토큰과 비밀키를 발급한다.
    3. 이제 UOSTime과 카카오 모두 요청토큰, 비밀키, redirect URI가 무엇인지 알고 있다. 특히 비밀키는 오직 UOSTime과 카카오만 알고 있다. 따라서 비밀키를 안다는 것은 본인의 신원을 보증하는 것과 같다.
  2. 사용자가 UOSTime에 카카오 계정으로 로그인하려고 한다.
  3. UOSTime은 사용자를 카카오로 이동시킨다. 이때 요청토큰과 redirect URI도 함께 보낸다.
  4. 사용자가 카카오 로그인을 수행한다.
  5. 로그인을 완료했으면, 카카오는 요청토큰과 redirect URI가 유효한지 검사한다.
    • 유효하지 않다면 오류인 것이다.
  6. 카카오는 사용자에게, 카카오가 UOSTime에게 어떤 권한을 제공할지 설정/확인하게 한다.
  7. 카카오는 redirect URI(UOSTime)로 사용자를 돌려보낸다. 이때 인증코드를 함께 보낸다.
  8. UOSTime은 인증코드를 확인한다.
  9. UOSTime은 카카오에게 요청토큰, 비밀키, redirect URI, 인증코드를 보낸다.
  10. 카카오는 이들의 유효성을 확인하고 액세스 토큰을 발급한다.
  11. 액세스 토큰을 가진 UOSTime은 허용된 권한 내에서 사용자 정보 등을 카카오에 요청할 수 있다.
    • 액세스 토큰이 만료되었다면 위 2.단계부터 다시 진행한다.