1 minute read

OAuth의 동작 방식

지난 포스팅에서 OAuth의 개념에 대해서 간단하게 정리해보았습니다. 이번 포스팅에서는, 카카오 서비스를 예로 들어 OAuth가 어떻게 동작하는지 좀더 상세하게 정리해보려고 합니다.

1. 준비

먼저 resource server에 우리가 만들 애플리케이션(client)정보를 등록해야합니다. 카카오같은 경우는 여기(kakao developer)에서 등록할 수 있으며, 등록 예시는 구글에 매우 많습니다. 어찌보면 프로젝트를 만들 때 로그인기능은 기본적으로 구현해야할 기능이고, 소셜로그인 역시 요즈음엔 필수적으로 여겨지기 때문입니다. 소셜 로그인 예제를 스텝바이스텝으로 잘 정리해두신 블로그로 여기(김코더 김주역)를 추천합니다.

client 도메인과 resource server로부터 authorization code를 리턴받을 redirect uri등록하면, client_id와 client_secret을 발급해줍니다. 이 정보는 반드시 잘 관리해야 합니다. resource owner가 클라이언트 권한 인증을 마친 후 이 정보로 올바른 client라는 것을 증명해야하기 때문에, client_secret이 노출된다면 절대 안됩니다.

또한 resource owner로부터 어떤 항목까지 자원을 받을 것인가(scope)도 설정하게 됩니다. 예를 들면 email, profile등, 이 정보를 받고 싶습니다, 하고 설정하는 것입니다. 여기까지 마치면, 이제 authorization code와 access token을 받을 준비가 되었습니다.

2. Authorization Code Flow

Alt text

  1. resource owner(user)가 client에 로그인하여 서비스를 이용하고자 한다고 가정해보겠습니다. user가 로그인 버튼을 누르면, client는 authorization code request를 보내게 됩니다. 이때 파라미터로 어떤 애플리케이션인지 확인하기 위한 client_id와, redirect_uri를 보내게 됩니다. ridirect_uri로는 authorization code가 보내질 것입니다.
  2. authorization server로 리다이렉트되고, 유저가 로그인/동의를 실행합니다.
  3. 유저는 client로 리다이렉트되며, client는 다음과 같은 형식으로 일회성의 authorization code를 제공받습니다.
    http://localhost:3000/callback?code=thisisauthorizationcode
    
  4. 이제 access token을 요청할 차례입니다. authorization code, client Id, client secret등을 authorization server로 포워딩합니다. authorization server는 authorization code로 정보를 요청하는 client가 올바른 client인지 client_secret을 통해 검증하고, access token을 생성하여 제공합니다.
  5. client는 이제 access token을 이용하여 resource server의 target API에 접근할 수 있습니다.

추천링크

Oauth의 기본적인 개념을 이해하기 위해서 다음의 페이지들을 추천합니다.

생활코딩 에서는 개념정리를 굉장히 잘 해주셨고,

김코더 김주역 블로그에는 oauth의 다양한 예제를 포스팅해두셨습니다.

auth0에서는 개념을 좀더 심도 깊게 알아볼 수 있습니다.


광고


Comments